permissions backend based on team membership
This commit is contained in:
parent
86a346f628
commit
5dfd74c360
2 changed files with 37 additions and 0 deletions
33
symposion/teams/backends.py
Normal file
33
symposion/teams/backends.py
Normal file
|
@ -0,0 +1,33 @@
|
|||
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)
|
|
@ -194,6 +194,10 @@ ACCOUNT_LOGOUT_REDIRECT_URL = "home"
|
|||
ACCOUNT_USER_DISPLAY = lambda user: user.email
|
||||
|
||||
AUTHENTICATION_BACKENDS = [
|
||||
# Permissions Backends
|
||||
"symposion.teams.backends.TeamPermissionsBackend",
|
||||
|
||||
# Auth backends
|
||||
"account.auth_backends.EmailAuthenticationBackend",
|
||||
]
|
||||
|
||||
|
|
Loading…
Reference in a new issue