src/pyams_security/role.py
changeset 120 5273b8015db1
parent 72 6dd8bc7bb7b5
equal deleted inserted replaced
119:ccf5a7b0bbe4 120:5273b8015db1
    14 
    14 
    15 
    15 
    16 # import standard library
    16 # import standard library
    17 
    17 
    18 # import interfaces
    18 # import interfaces
    19 from pyams_security.interfaces import IRole
    19 from pyams_security.interfaces import IRole, IRoleEvent
    20 
    20 
    21 # import packages
    21 # import packages
    22 from pyams_utils.request import check_request
    22 from pyams_utils.request import check_request
    23 from pyams_utils.vocabulary import vocabulary_config
    23 from pyams_utils.vocabulary import vocabulary_config
    24 from zope.interface import implementer
    24 from zope.interface import implementer
    42         self.id = values.get('id')
    42         self.id = values.get('id')
    43         self.title = values.get('title')
    43         self.title = values.get('title')
    44         self.description = values.get('description')
    44         self.description = values.get('description')
    45         self.permissions = values.get('permissions')
    45         self.permissions = values.get('permissions')
    46         self.managers = values.get('managers')
    46         self.managers = values.get('managers')
       
    47 
       
    48 
       
    49 class RoleSelector(object):
       
    50     """Role based event selector predicate
       
    51 
       
    52     This selector can be used as a subscriber predicate to define
       
    53     a role that the event must match::
       
    54 
       
    55     .. code-block:: python
       
    56 
       
    57         from pyams_utils.interfaces.site import ISiteRoot
       
    58 
       
    59         @subscriber(IRoleGrantedEvent, context_selector=ISiteRoot, role_selector='myams.admin')
       
    60         def handle_granted_manager_role(event):
       
    61             '''Handle granted manager role on site root'''
       
    62     """
       
    63 
       
    64     def __init__(self, roles, config):
       
    65         if not isinstance(roles, (list, tuple, set)):
       
    66             roles = {roles}
       
    67         self.roles = roles
       
    68 
       
    69     def text(self):
       
    70         return 'role_selector = %s' % str(self.roles)
       
    71 
       
    72     phash = text
       
    73 
       
    74     def __call__(self, event):
       
    75         assert IRoleEvent.providedBy(event)
       
    76         return event.role_id in self.roles
    47 
    77 
    48 
    78 
    49 def register_role(config, role):
    79 def register_role(config, role):
    50     """Register a new role
    80     """Register a new role
    51 
    81