def getGroupPrincipals(group, auth=None): if auth is None: auth = getUtility(IAuthentication) if not IMemberGetterGroup.providedBy(group): return () seen = set() stack = [iter(group.getMembers())] while stack: try: p_id = stack[-1].next() except StopIteration: stack.pop() continue if p_id not in seen: try: principal = auth.getPrincipal(p_id) except PrincipalLookupError: continue seen.add(p_id) if IMemberGetterGroup.providedBy(principal): stack.append(iter(principal.getMembers())) return seen
def getRolesForPrincipal(self, principal_id): if principal_id == self.principal.id: return ('content.Owner', Allow), for group in self.groups.getGroups(): if principal_id in getattr(group, 'leaders', ()): return (('team.Leader', Allow), ('team.Member', Allow)) elif IMemberGetterGroup.providedBy(group) and principal_id in group.getMembers(): return (('team.Member', Allow),) return ()