Esempio n. 1
0
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
Esempio n. 2
0
    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 ()