updates
This commit is contained in:
1 parent
b791a2992e
commit
d4696b8fee
54 files changed
+1639
-5032
No files matched your search
@@ -0,0 +1,82 @@
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.backends import ModelBackend
|
||||
from .models import Staff, Student
|
||||
|
||||
class MultiModelBackend(ModelBackend):
|
||||
def authenticate(self, request, username=None, password=None, **kwargs):
|
||||
"""
|
||||
Authenticate the user based on username (phone for Student and Staff) and password.
|
||||
"""
|
||||
if username is None or password is None:
|
||||
return None
|
||||
|
||||
# Try authenticating as Staff
|
||||
try:
|
||||
staff = Staff.objects.get(phone=username)
|
||||
if staff.check_password(password):
|
||||
return staff
|
||||
except Staff.DoesNotExist:
|
||||
pass
|
||||
|
||||
# Try authenticating as Student
|
||||
try:
|
||||
student = Student.objects.get(phone=username)
|
||||
if student.check_password(password):
|
||||
return student
|
||||
except Student.DoesNotExist:
|
||||
pass
|
||||
|
||||
# Return None if no match
|
||||
return None
|
||||
|
||||
def get_user(self, user_id):
|
||||
"""
|
||||
Retrieve a user instance using their ID.
|
||||
"""
|
||||
for model in [Staff, Student]:
|
||||
try:
|
||||
return model.objects.get(pk=user_id)
|
||||
except model.DoesNotExist:
|
||||
continue
|
||||
return None
|
||||
|
||||
def get_group_permissions(self, user_obj, obj=None):
|
||||
"""
|
||||
Return a set of permission strings that the user has through their groups.
|
||||
"""
|
||||
if not user_obj.is_active or user_obj.is_anonymous or obj is not None:
|
||||
return set()
|
||||
|
||||
if isinstance(user_obj, (Staff, Student)):
|
||||
if not hasattr(user_obj, '_group_perm_cache'):
|
||||
perms = set()
|
||||
for group in user_obj.groups.all():
|
||||
perms.update(
|
||||
"%s.%s" % (ct, name)
|
||||
for ct, name in group.permissions.values_list(
|
||||
'content_type__app_label',
|
||||
'codename'
|
||||
)
|
||||
)
|
||||
user_obj._group_perm_cache = perms
|
||||
return user_obj._group_perm_cache
|
||||
else:
|
||||
return super().get_group_permissions(user_obj, obj)
|
||||
|
||||
def get_all_permissions(self, user_obj, obj=None):
|
||||
if not user_obj.is_active or user_obj.is_anonymous or obj is not None:
|
||||
return set()
|
||||
|
||||
if isinstance(user_obj, (Staff, Student)):
|
||||
return self.get_group_permissions(user_obj, obj)
|
||||
else:
|
||||
return super().get_all_permissions(user_obj, obj)
|
||||
|
||||
def has_perm(self, user_obj, perm, obj=None):
|
||||
if not user_obj.is_active:
|
||||
return False
|
||||
|
||||
if isinstance(user_obj, (Staff, Student)):
|
||||
return perm in self.get_all_permissions(user_obj, obj)
|
||||
else:
|
||||
return super().has_perm(user_obj, perm, obj)
|
||||
Reference in new issue
Block a user