Ignore:
Timestamp:
27 May 2011, 02:05:02 (14 years ago)
Author:
uli
Message:

#38

Location:
main/waeup.sirp/trunk/src/waeup/sirp
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • main/waeup.sirp/trunk/src/waeup/sirp/authentication.py

    r6182 r6203  
    174174        site = grok.getSite()
    175175        return site['users']
     176
     177@grok.subscribe(IUserAccount, grok.IObjectRemovedEvent)
     178def handle_account_removal(account, event):
     179    """When an account is removed, local roles might have to be deleted.
     180    """
     181    local_roles = account.getLocalRoles()
     182    principal = account.name
     183    for role_id, object_list in local_roles.items():
     184        for object in object_list:
     185            try:
     186                role_manager = IPrincipalRoleManager(object)
     187            except TypeError:
     188                # No role manager, no roles to remove
     189                continue
     190            role_manager.unsetRoleForPrincipal(role_id, principal)
     191    return
  • main/waeup.sirp/trunk/src/waeup/sirp/authentication.txt

    r6202 r6203  
    120120   True
    121121
     122When an account get deleted, also the local roles of the owner get
     123removed. Let's setup a local role for `alice`:
     124
     125   >>> faculty = Faculty()
     126   >>> root['app']['alice_fac'] = faculty
     127   >>> role_manager = IPrincipalRoleManager(faculty)
     128   >>> role_manager.assignRoleToPrincipal(
     129   ...    'waeup.PortalManager', 'alice')
     130   >>> notify(LocalRoleSetEvent(faculty, 'waeup.PortalManager', 'alice',
     131   ...                          granted=True))
     132
     133The local role is set now:
     134
     135   >>> from zope.securitypolicy.interfaces import IPrincipalRoleMap
     136   >>> IPrincipalRoleMap(faculty).getPrincipalsAndRoles()
     137   [('waeup.PortalManager', 'alice', PermissionSetting: Allow)]
     138
     139But when we delete Alices account from ZODB:
     140
     141   >>> del root['app']['users']['alice']
     142   >>> IPrincipalRoleMap(faculty).getPrincipalsAndRoles()
     143   []
     144
     145the local role has gone.
     146
     147
    122148Logging in via side bar
    123149=======================
Note: See TracChangeset for help on using the changeset viewer.