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 |