1 # -*- coding: iso-8859-1 -*-
3 MoinMoin - FusionForge groups backed
5 This backend assigns group membership according to FusionForge user
8 @copyright: 2009 MoinMoin:DmitrijsMilajevs
9 @license: GPL, see COPYING for details
12 from MoinMoin.datastruct.backends import LazyGroup, LazyGroupsBackend
16 def parse_group_name(group_name):
18 ("FF(Site(Admins|Users)|Project_(.*)_(Admins|Writers|Readers))Group$",
21 if m.group (1)[0:4] == 'Site':
22 return ('Site', '', m.group (2))
24 return ('Project', m.group (3), m.group (4))
28 class FFLazyGroup(LazyGroup):
31 class FFLazyGroups(LazyGroupsBackend):
33 def __init__(self, request, ffsa):
34 super(FFLazyGroups, self).__init__(request)
37 if request.user.valid:
38 self._username = request.user.name
41 logging.debug ("FFLazyGroups __init__: username=%s", (self._username,))
43 def __contains__(self, group_name):
45 ("FFLazyGroups __contains__: group_name=%s", (group_name,))
48 (scope, project, permission) = parse_group_name (group_name)
54 elif scope == "Project":
55 return project in self._ffsa.projects
62 [ [ 'SiteAdmins', 'SiteUsers' ] ]
64 map (lambda r: 'FFProject_%s_%sGroup' % (p, r),
65 [ 'Admins', 'Writers', 'Readers' ]),
68 def __getitem__(self, group_name):
69 return FFLazyGroup(self.request, group_name, self)
71 def _iter_group_members(self, group_name):
73 ("FFLazyGroups _iter_group_members: group_name=%s", (group_name,))
75 (scope, project, permission) = parse_group_name (group_name)
80 if permission == "User":
81 # ??? iterator on all Forge users
83 elif permission == "Admin":
84 return self._ffsa.admins.__iter__ ()
86 elif scope == "Project":
88 return self._ffsa.get_permission_entries(project,permission).__iter__()
92 def _group_has_member(self, group_name, member):
94 ("FFLazyGroups _group_has_member: group_name=%s member=%s _user=%s" \
95 % (group_name, member, self._username))
97 # For anonymous (non-logged-in) users, member is "" and self._username
98 # is None. For authenticated users, both are assumed to be set to
99 # the user's login. If not, we consider that we have an unexpected
100 # inconsistency, and return False.
102 if member == "" or member != self._username:
106 (scope, project, permission) = parse_group_name (group_name)
109 ("FFLazyGroups _group_has_member: False (can't parse)")
113 ("FFLazyGroups _group_has_member: scope=%s project=%s perm=%s" \
114 % (scope, project, permission))
118 if permission == "Users":
119 result = self._username != None
120 elif permission == "Admins":
121 # ??? ffsa should instead provide is_super_user
122 result = self._username in self._ffsa.admins
124 elif scope == "Project":
125 result = self._ffsa.check_permission (project, permission, self._username)
128 ("FFLazyGroups _group_has_member: %s" % (result,))