-
Notifications
You must be signed in to change notification settings - Fork 3
/
computeRoleMap.py
59 lines (48 loc) · 1.72 KB
/
computeRoleMap.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
pu=context.plone_utils
acquired_roles=pu.getInheritedLocalRoles(context)
local_roles=context.acl_users.getLocalRolesForDisplay(context)
mtool=context.portal_membership
# result contains dictionaries with the keys
# name, type, global_roles, acquired_roles, local_roles
result=[]
result1={}
# first process acquired roles
for name, roles, type, id in acquired_roles:
#We prefer the fullname
if not id.startswith('group_'):
member = mtool.getMemberInfo(name)
if member is not None and not member['fullname'] == '':
name = name + ' (' + member['fullname'] + ')'
result1[id]={
'id' : id,
'name' : name,
'type' : type,
'global' : [],
'acquired' : roles,
'local' : []
}
# second process local roles
for name, roles, type, id in local_roles:
if result1.get(id):
result1[id]['local']=roles
else:
#We prefer the fullname
if not id.startswith('group_'):
member = mtool.getMemberInfo(name)
if member is not None and not member['fullname'] == '':
name = name + ' (' + member['fullname'] + ')'
result1[id]={
'id' : id,
'name' : name,
'type' : type,
'global' : [],
'acquired' : [],
'local' : roles
}
# TODO: process global roles
# now sort the list: first Owner role, then groups, then users, and then alphabetically
result=result1.values()
dec_users = [('Owner' not in a['local'], a['type'], a['name'], a) for a in result]
dec_users.sort()
result = [a[-1] for a in dec_users]
return result