Files @ 7fac10241ec7
Branch filter:

Location: symposion_app/vendor/symposion/teams/backends.py

Joel Addison
Improve attendee reports

Display attendee profile data in normal table without DataTables so
sorting is not applied, causing data to be confusing to read.
Include item quantity in attendee data report for accurate schwag packing.
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"):
            # Member permissions
            memberships = Team.objects.filter(
                Q(memberships__user=user_obj),
                Q(memberships__state="member"),
            )
            perms = memberships.values_list(
                "permissions__content_type__app_label",
                "permissions__codename"
            ).order_by()
            permissions = ["%s.%s" % (ct, name) for ct, name in perms]
            # Manager permissions
            memberships = Team.objects.filter(
                Q(memberships__user=user_obj),
                Q(memberships__state="manager"),
            )
            perms = memberships.values_list(
                "manager_permissions__content_type__app_label",
                "manager_permissions__codename"
            ).order_by()
            permissions += ["%s.%s" % (ct, name) for ct, name in perms]
            user_obj._team_perm_cache = set(permissions)
        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)