Source code for activemembers.backends

"""
Authentication backend to check permissions
"""
from django.contrib.auth.models import Permission
from django.db.models import Q
from django.utils import timezone

from members.models import Member


[docs]class MemberGroupBackend: """Check permissions against MemberGroups"""
[docs] def authenticate(self, *args, **kwargs): """Not implemented in this backend""" return
[docs] def get_user(self, *args, **kwargs): """Not implemented in this backend""" return
def _get_permissions(self, user, obj): if not user.is_active or user.is_anonymous or obj is not None: return set() try: member = Member.objects.get(pk=user.pk) except Member.DoesNotExist: return set() groups = member.membergroup_set.filter( Q(membergroupmembership__until=None) | Q(membergroupmembership__until__gte=timezone.now()) ) perm_cache_name = "_membergroup_perm_cache" if not hasattr(user, perm_cache_name): perms = ( Permission.objects.filter(membergroup__in=groups) .values_list("content_type__app_label", "codename") .order_by() ) setattr( user, perm_cache_name, set("{}.{}".format(ct, name) for ct, name in perms), ) return getattr(user, perm_cache_name)
[docs] def get_all_permissions(self, user, obj=None): return self._get_permissions(user, obj)
[docs] def get_group_permissions(self, user, obj=None): return self._get_permissions(user, obj)
[docs] def has_perm(self, user, perm, obj=None): if not user.is_active: return False return perm in self.get_all_permissions(user, obj)
[docs] def has_module_perms(self, user, app_label): """Returns True if user has any permissions in the given app_label""" if not user.is_active: return False for perm in self.get_all_permissions(user): if perm[: perm.index(".")] == app_label: return True return False