Added permission app
This commit is contained in:
parent
2a2e78f83f
commit
67d1d9f7b7
9 changed files with 182 additions and 0 deletions
33
apps/member/backends.py
Normal file
33
apps/member/backends.py
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
from django.contribs.contenttype.models import ContentType
|
||||
from member.models import Club, Membership, RolePermissions
|
||||
|
||||
|
||||
class PermissionBackend(object):
|
||||
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:
|
||||
continue
|
||||
for permission in RolePermissions.objects.get(role=membership.role).permissions.objects.all():
|
||||
permission = permission.about(user=user, club=membership.club)
|
||||
yield permission
|
||||
|
||||
def has_perm(self, user_obj, perm, obj=None):
|
||||
if obj is None:
|
||||
return False
|
||||
perm = perm.split('_')
|
||||
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))
|
||||
|
||||
def get_all_permissions(self, user_obj, obj=None):
|
||||
if obj is None:
|
||||
return []
|
||||
else:
|
||||
return list(self.permissions(user_obj, obj))
|
||||
Loading…
Add table
Add a link
Reference in a new issue