mirror of
https://gitlab.crans.org/bde/nk20
synced 2025-02-06 15:23:00 +00:00
38 lines
1.4 KiB
Python
38 lines
1.4 KiB
Python
# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
from member.models import Club, Membership, RolePermissions
|
|
from django.contrib.auth.backends import ModelBackend
|
|
|
|
|
|
class PermissionBackend(ModelBackend):
|
|
supports_object_permissions = True
|
|
supports_anonymous_user = False
|
|
supports_inactive_user = False
|
|
|
|
def permissions(self, user):
|
|
for membership in Membership.objects.filter(user=user).all():
|
|
if not membership.valid() or membership.roles is None:
|
|
continue
|
|
for role_permissions in RolePermissions.objects.filter(role=membership.roles).all():
|
|
for permission in role_permissions.permissions.all():
|
|
permission = permission.about(user=user, club=membership.club)
|
|
yield permission
|
|
|
|
def has_perm(self, user_obj, perm, obj=None):
|
|
if user_obj.is_superuser:
|
|
return True
|
|
|
|
if obj is None:
|
|
return False
|
|
perm = perm.split('_', 3)
|
|
perm_type = perm[1]
|
|
perm_field = perm[2] if len(perm) == 3 else None
|
|
return any(permission.applies(obj, perm_type, perm_field) for permission in self.permissions(user_obj))
|
|
|
|
def has_module_perms(self, user_obj, app_label):
|
|
return False
|
|
|
|
def get_all_permissions(self, user_obj, obj=None):
|
|
return list(self.permissions(user_obj))
|