source: main/waeup.sirp/trunk/src/waeup/sirp/users.py @ 6372

Last change on this file since 6372 was 6202, checked in by uli, 14 years ago

#37

File size: 2.2 KB
RevLine 
[4111]1"""Users (principals) for the WAeUP portal.
[4089]2"""
3import grok
[6180]4from zope.event import notify
5from zope.interface import Interface
6from zope.securitypolicy.interfaces import IPrincipalRoleMap
[4920]7from waeup.sirp.authentication import Account
[6180]8from waeup.sirp.interfaces import IUserContainer, ILocalRoleSetEvent
[4089]9
10class UserContainer(grok.Container):
11    """A container for principals.
12
13    See interfaces.py and users.txt for extensive description.
14    """
15    grok.implements(IUserContainer)
16    grok.require('waeup.manageUsers')
17
[4634]18    def addUser(self, name, password, title=None, description=None, roles=[]):
[4638]19        """Add a new Account instance, created from parameters.
20        """
[4089]21        if title is None:
22            title = name
23        if description is None:
24            description = title
[4634]25        self[name] = Account(name, password, title, description, roles)
[4089]26
27    def addAccount(self, account):
[4638]28        """Add the account passed.
29        """
[4089]30        self[account.name] = account
[6180]31
[4089]32    def delUser(self, name):
[4638]33        """Delete user, if an account with the given name exists.
34
35        Do not complain, if the name does not exist.
36        """
[4089]37        if name in self.keys():
38            del self[name]
[6180]39
40class LocalRoleSetEvent(object):
41
42    grok.implements(ILocalRoleSetEvent)
43
44    def __init__(self, object, role_id, principal_id, granted=True):
45        self.object = object
46        self.role_id = role_id
47        self.principal_id = principal_id
48        self.granted = granted
49
50@grok.subscribe(Interface, ILocalRoleSetEvent)
51def handle_local_role_changed(obj, event):
52    site = grok.getSite()
53    if site is None:
54        return
55    users = site['users']
56    role_id = event.role_id
57    if event.principal_id not in users.keys():
58        return
59    user = users[event.principal_id]
60    user.notifyLocalRoleChanged(event.object, event.role_id, event.granted)
61    return
62
63@grok.subscribe(Interface, grok.IObjectRemovedEvent)
64def handle_local_roles_on_obj_removal(obj, event):
[6202]65    try:
66        role_map = IPrincipalRoleMap(obj)
67    except TypeError:
68        # no map, no roles to remove
69        return
[6180]70    for local_role, user_name, setting in role_map.getPrincipalsAndRoles():
71        notify(LocalRoleSetEvent(
72                obj, local_role, user_name, granted=False))
73    return
Note: See TracBrowser for help on using the repository browser.