mirror of
https://gitlab.crans.org/bde/nk20
synced 2025-06-21 01:48:21 +02:00
Update a lot of things
This commit is contained in:
@ -6,7 +6,7 @@ from django.contrib.auth.admin import UserAdmin
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
from .forms import ProfileForm
|
||||
from .models import Club, Membership, Profile, Role
|
||||
from .models import Club, Membership, Profile, Role, RolePermissions
|
||||
|
||||
|
||||
class ProfileInline(admin.StackedInline):
|
||||
@ -40,3 +40,4 @@ admin.site.register(User, CustomUserAdmin)
|
||||
admin.site.register(Club)
|
||||
admin.site.register(Membership)
|
||||
admin.site.register(Role)
|
||||
admin.site.register(RolePermissions)
|
||||
|
@ -1,33 +1,37 @@
|
||||
from django.contribs.contenttype.models import ContentType
|
||||
# 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(object):
|
||||
class PermissionBackend(ModelBackend):
|
||||
supports_object_permissions = True
|
||||
supports_anonymous_user = False
|
||||
supports_inactive_user = False
|
||||
|
||||
def authenticate(self, username, password):
|
||||
return None
|
||||
|
||||
def permissions(self, user, obj):
|
||||
for membership in user.memberships.all():
|
||||
if not membership.valid() or membership.role is None:
|
||||
def permissions(self, user):
|
||||
for membership in Membership.objects.filter(user=user).all():
|
||||
if not membership.valid() or membership.roles is None:
|
||||
continue
|
||||
for permission in RolePermissions.objects.get(role=membership.role).permissions.objects.all():
|
||||
permission = permission.about(user=user, club=membership.club)
|
||||
yield permission
|
||||
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 obj in self.permissions(user_obj, obj))
|
||||
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):
|
||||
if obj is None:
|
||||
return []
|
||||
else:
|
||||
return list(self.permissions(user_obj, obj))
|
||||
return list(self.permissions(user_obj))
|
||||
|
@ -154,9 +154,9 @@ class Membership(models.Model):
|
||||
|
||||
def valid(self):
|
||||
if self.date_end is not None:
|
||||
return self.date_start <= datetime.datetime.now() < self.date_end
|
||||
return self.date_start.toordinal() <= datetime.datetime.now().toordinal() < self.date_end.toordinal()
|
||||
else:
|
||||
return self.date_start <= datetime.datetime.now()
|
||||
return self.date_start.toordinal() <= datetime.datetime.now().toordinal()
|
||||
|
||||
class Meta:
|
||||
verbose_name = _('membership')
|
||||
|
Reference in New Issue
Block a user