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 permdict = { "Admins": ("plugin_moinmoin_access", "= 3"),
34 "Writers": ("plugin_moinmoin_access", "= 2"),
35 "Readers": ("plugin_moinmoin_access", "= 1") }
37 def __init__(self, request, ffsa):
38 super(FFLazyGroups, self).__init__(request)
41 if request.user.valid:
42 self._username = request.user.name
45 logging.debug ("FFLazyGroups __init__: username=%s", (self._username,))
47 def __contains__(self, group_name):
49 ("FFLazyGroups __contains__: group_name=%s", (group_name,))
52 (scope, project, permission) = parse_group_name (group_name)
58 elif scope == "Project":
59 return project in self._ffsa.projects
66 [ [ 'SiteAdmins', 'SiteUsers' ] ]
68 map (lambda r: 'FFProject_%s_%sGroup' % (p, r),
69 [ 'Admins', 'Writers', 'Readers' ]),
72 def __getitem__(self, group_name):
73 return FFLazyGroup(self.request, group_name, self)
75 def _iter_group_members(self, group_name):
77 ("FFLazyGroups _iter_group_members: group_name=%s", (group_name,))
79 (scope, project, permission) = parse_group_name (group_name)
84 if permission == "User":
85 # ??? iterator on all Forge users
87 elif permission == "Admin":
88 return self._ffsa.admins.__iter__ ()
90 elif scope == "Project":
92 return self._ffsa.get_permission_entries \
94 + FFLazyGroups.permdict[permission])).__iter__ ()
98 def _group_has_member(self, group_name, member):
100 ("FFLazyGroups _group_has_member: group_name=%s member=%s _user=%s" \
101 % (group_name, member, self._username))
103 # For anonymous (non-logged-in) users, member is "" and self._username
104 # is None. For authenticated users, both are assumed to be set to
105 # the user's login. If not, we consider that we have an unexpected
106 # inconsistency, and return False.
108 if member == "" or member != self._username:
112 (scope, project, permission) = parse_group_name (group_name)
115 ("FFLazyGroups _group_has_member: False (can't parse)")
119 ("FFLazyGroups _group_has_member: scope=%s project=%s perm=%s" \
120 % (scope, project, permission))
124 if permission == "Users":
125 result = self._username != None
126 elif permission == "Admins":
127 # ??? ffsa should instead provide is_super_user
128 result = self._username in self._ffsa.admins
130 elif scope == "Project":
131 result = self._ffsa.check_permission \
133 + FFLazyGroups.permdict[permission] \
134 + (self._username,)))
137 ("FFLazyGroups _group_has_member: %s" % (result,))