src/pyams_security/utility.py
changeset 162 28fdede9810b
parent 152 e34b240ffe2a
child 165 9268824f88fc
equal deleted inserted replaced
161:12175a34164a 162:28fdede9810b
    13 __docformat__ = 'restructuredtext'
    13 __docformat__ = 'restructuredtext'
    14 
    14 
    15 import logging
    15 import logging
    16 from functools import lru_cache
    16 from functools import lru_cache
    17 
    17 
       
    18 from ZODB.POSException import ConnectionStateError
    18 from beaker.cache import cache_region
    19 from beaker.cache import cache_region
    19 from pyramid.authentication import AuthTktCookieHelper
    20 from pyramid.authentication import AuthTktCookieHelper
    20 from pyramid.decorator import reify
    21 from pyramid.decorator import reify
    21 from pyramid.interfaces import IAuthenticationPolicy
    22 from pyramid.interfaces import IAuthenticationPolicy
    22 from pyramid.location import lineage
    23 from pyramid.location import lineage
    23 from pyramid.security import Authenticated, Everyone
    24 from pyramid.security import Authenticated, Everyone
    24 from zope.container.folder import Folder
    25 from zope.container.folder import Folder
    25 from zope.interface import implementer
    26 from zope.interface import implementer
    26 from zope.schema.fieldproperty import FieldProperty
    27 from zope.schema.fieldproperty import FieldProperty
    27 
    28 
    28 from pyams_security.interfaces import AuthenticatedPrincipalEvent, IAuthenticationPlugin, ICredentialsPlugin, \
    29 from pyams_security.interfaces import AuthenticatedPrincipalEvent, IAuthenticationPlugin, \
    29     IDirectoryPlugin, IGroupsAwareDirectoryPlugin, IProtectedObject, ISecurityManager
    30     ICredentialsPlugin, IDirectoryPlugin, IGroupsAwareDirectoryPlugin, IProtectedObject, \
       
    31     ISecurityManager
    30 from pyams_security.principal import MissingPrincipal, UnknownPrincipal
    32 from pyams_security.principal import MissingPrincipal, UnknownPrincipal
    31 from pyams_utils.registry import query_utility
    33 from pyams_utils.registry import query_utility
    32 from pyams_utils.request import check_request, request_property
    34 from pyams_utils.request import check_request, request_property
    33 from pyams_utils.wsgi import wsgi_environ_cache
    35 from pyams_utils.wsgi import wsgi_environ_cache
    34 
    36 
   263         principal_id = self.unauthenticated_userid(request)
   265         principal_id = self.unauthenticated_userid(request)
   264         if principal_id:
   266         if principal_id:
   265             return principal_id
   267             return principal_id
   266         manager = self._get_security_manager(request)
   268         manager = self._get_security_manager(request)
   267         if manager is not None:
   269         if manager is not None:
   268             return manager.authenticated_userid(request)
   270             try:
       
   271                 return manager.authenticated_userid(request)
       
   272             except ConnectionStateError:
       
   273                 pass
       
   274         return None
   269 
   275 
   270     @request_property(key=None)
   276     @request_property(key=None)
   271     def effective_principals(self, request, context=None):
   277     def effective_principals(self, request, context=None):
   272         try:
   278         try:
   273             logger.debug(">>> getting principals for principal {0} ({1}) on {2!r}".format(request.principal.title,
   279             logger.debug(">>> getting principals for principal {0} ({1}) on {2!r}".format(request.principal.title,