19 from pyams_form.interfaces.form import IFormContextPermissionChecker, IFormSecurityContext |
19 from pyams_form.interfaces.form import IFormContextPermissionChecker, IFormSecurityContext |
20 |
20 |
21 __docformat__ = 'restructuredtext' |
21 __docformat__ = 'restructuredtext' |
22 |
22 |
23 |
23 |
24 def get_edit_permission(request, context=None): |
24 def get_checker(request, context=None, view=None, action=''): |
25 """Get required edit permission""" |
25 """Get permission checker""" |
|
26 registry = request.registry |
26 if context is None: |
27 if context is None: |
27 context = request.context |
28 context = request.context |
28 registry = request.registry |
29 checker = registry.queryMultiAdapter((context, request, view), |
29 checker = registry.queryMultiAdapter((context, request), IFormContextPermissionChecker) |
30 IFormContextPermissionChecker, |
|
31 name=action) if view is not None else None |
30 if checker is None: |
32 if checker is None: |
31 checker = registry.queryAdapter(context, IFormContextPermissionChecker) |
33 checker = registry.queryMultiAdapter((context, request), |
|
34 IFormContextPermissionChecker, |
|
35 name=action) |
|
36 if checker is None: |
|
37 checker = registry.queryAdapter(context, IFormContextPermissionChecker, |
|
38 name=action) |
|
39 return checker |
|
40 |
|
41 |
|
42 def get_edit_permission(request, context=None, action=''): |
|
43 """Get required edit permission""" |
|
44 checker = get_checker(request, context, action=action) |
|
45 if action and (checker is None): |
|
46 checker = get_checker(request, context, action='') |
32 if checker is not None: |
47 if checker is not None: |
33 return checker.edit_permission |
48 return checker.edit_permission |
34 return None |
49 return None |
35 |
50 |
36 |
51 |
48 |
63 |
49 This class is a form mixin class which should be used for forms protected by a |
64 This class is a form mixin class which should be used for forms protected by a |
50 security context. |
65 security context. |
51 """ |
66 """ |
52 |
67 |
|
68 action_type = '' # default action |
|
69 |
53 @reify |
70 @reify |
54 def permission(self): |
71 def permission(self): |
55 """This permission is required to be able to edit the form context""" |
72 """This permission is required to be able to edit the form context""" |
56 request = self.request # pylint: disable=no-member |
73 request = self.request # pylint: disable=no-member |
57 registry = request.registry |
|
58 checker = None |
|
59 context = IFormSecurityContext(self, None) |
74 context = IFormSecurityContext(self, None) |
60 if context is None: |
75 if context is None: |
61 context = self.context # pylint: disable=no-member |
76 context = self.context # pylint: disable=no-member |
62 view = getattr(self, '__parent__', None) or \ |
77 view = getattr(self, '__parent__', None) or \ |
63 getattr(self, 'view', None) or \ |
78 getattr(self, 'view', None) or \ |
64 getattr(self, 'table', None) |
79 getattr(self, 'table', None) |
65 if view is not None: |
80 checker = get_checker(request, context, view, action=self.action_type) |
66 checker = registry.queryMultiAdapter((context, request, view), |
81 if (checker is None) and self.action_type: |
67 IFormContextPermissionChecker) |
82 checker = get_checker(request, context, action='') |
68 if checker is None: |
|
69 checker = registry.queryAdapter(context, IFormContextPermissionChecker) |
|
70 if checker is not None: |
83 if checker is not None: |
71 return checker.edit_permission |
84 return checker.edit_permission |
72 return None |
85 return None |