source: main/waeup.sirp/trunk/src/waeup/sirp/permissions.py @ 6144

Last change on this file since 6144 was 6144, checked in by uli, 13 years ago
  • Add default adapter for ILocalRolesAssignable
  • Property svn:eol-style set to native
File size: 3.7 KB
Line 
1import grok
2from zope.interface import Interface
3from waeup.sirp.interfaces import ILocalRolesAssignable
4
5class Public(grok.Permission):
6    """Everyone-can-do-this-permission.
7
8    This permission is meant to be applied to objects/views/pages
9    etc., that should be usable/readable by everyone.
10
11    We need this to be able to tune default permissions more
12    restrictive and open up some dedicated objects like the front
13    page.
14    """
15    grok.name('waeup.Public')
16
17class Anonymous(grok.Permission):
18    """Only-anonymous-can-do-this-permission.
19    """
20    grok.name('waeup.Anonymous')
21
22class ViewPermission(grok.Permission):
23    grok.name('waeup.View')
24
25class ManageUniversity(grok.Permission):
26    grok.name('waeup.manageUniversity')
27
28class ManageUsers(grok.Permission):
29    grok.name('waeup.manageUsers')
30
31class ManageDataCenter(grok.Permission):
32    grok.name('waeup.manageDataCenter')
33
34class ManagePortalSettings(grok.Permission):
35    grok.name('waeup.managePortalSettings')
36
37# Local Roles
38class DepartmentOfficer(grok.Role):
39    grok.name('waeup.local.DepartmentOfficer')
40    grok.permissions('waeup.manageUniversity','waeup.View', 'waeup.Public')
41
42# Global Roles
43class PortalUser(grok.Role):
44    grok.name('waeup.PortalUser')
45    grok.permissions('waeup.View', 'waeup.Public')
46
47class PortalManager(grok.Role):
48    grok.name('waeup.PortalManager')
49    grok.permissions('waeup.manageUniversity', 'waeup.manageUsers',
50                     'waeup.View', 'waeup.Public','waeup.manageACBatches',
51                     'waeup.manageDataCenter','waeup.managePortalSettings')
52
53def getRoles():
54    app = grok.getSite()
55    app = None
56    manager = None
57    if app is not None:
58        from zope.securitypolicy.interfaces import IRolePermissionManager
59        manager = IRolePermissionManager(app, None)
60    else:
61        from zope.securitypolicy.rolepermission import (
62            rolePermissionManager as manager)
63    role_permission_map =  manager.getRolesAndPermissions()
64    result = dict()
65    for item in role_permission_map:
66        if not item[1].startswith('waeup.'):
67            # Ignore non-WAeUP roles...
68            continue
69        if item[1].startswith('waeup.local.'):
70            continue
71        result[item[1]] = True
72    return sorted(result.keys())
73
74class LocalRolesAssignable(grok.Adapter):
75    """Default implementation for `ILocalRolesAssignable`.
76
77    This adapter returns a list for dictionaries for objects for which
78    we want to know the roles assignable to them locally.
79
80    The returned dicts contain a ``name`` and a ``title`` entry which
81    give a role (``name``) and a description, for which kind of users
82    the permission is meant to be used (``title``).
83
84    Having this adapter registered we make sure, that for each normal
85    object we get a valid `ILocalRolesAssignable` adapter.
86
87    Objects that want to offer certain local roles, can do so by
88    setting a (preferably class-) attribute to a list of dictionaries.
89
90    You can also define different adapters for different contexts to
91    have different role lookup mechanisms become available. But in
92    normal cases it should be sufficient to use this basic adapter.
93    """
94    grok.context(Interface)
95    grok.provides(ILocalRolesAssignable)
96
97    _roles = []
98
99    def __init__(self, context):
100        self.context = context
101        self._roles = getattr(context, 'local_roles', self._roles)
102        return
103
104    def __call__(self):
105        """Get a list of dictionaries containing ``names`` (the roles to
106        assign) and ``titles`` (some description of the type of user
107        to assign each role to).
108        """
109        return self._roles
110
111    def roles(self):
112        """Return a list of roles assignable to the context object.
113        """
114        return [x['name'] for x in self._roles]
Note: See TracBrowser for help on using the repository browser.