Files @ cb4b0fac3871
Branch filter:

Location: symposion_app/symposion/teams/backends.py

Patrick Altman
Merge branch 'django1.6-compatibility' of https://github.com/mbrochh/symposion into mbrochh-django1.6-compatibility

Conflicts:
symposion/boxes/urls.py
symposion/cms/urls.py
symposion/conference/urls.py
symposion/proposals/models.py
symposion/proposals/urls.py
symposion/reviews/urls.py
symposion/schedule/models.py
symposion/schedule/urls.py
symposion/speakers/urls.py
symposion/sponsorship/urls.py
symposion/teams/urls.py
from django.db.models import Q

from .models import Team


class TeamPermissionsBackend(object):

    def authenticate(self, username=None, password=None):
        return None

    def get_team_permissions(self, user_obj, obj=None):
        """
        Returns a set of permission strings that this user has through his/her
        team memberships.
        """
        if user_obj.is_anonymous() or obj is not None:
            return set()
        if not hasattr(user_obj, "_team_perm_cache"):
            memberships = Team.objects.filter(
                Q(memberships__user=user_obj),
                Q(memberships__state="manager") | Q(memberships__state="member"),
            )
            perms = memberships.values_list(
                "permissions__content_type__app_label",
                "permissions__codename"
            ).order_by()
            user_obj._team_perm_cache = set(["%s.%s" % (ct, name) for ct, name in perms])
        return user_obj._team_perm_cache

    def has_perm(self, user_obj, perm, obj=None):
        if not user_obj.is_active:
            return False
        return perm in self.get_team_permissions(user_obj, obj)