You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.5 KiB
88 lines
2.5 KiB
|
|
from django.contrib.auth.models import BaseUserManager
|
|
from django.contrib.auth.models import Group
|
|
|
|
|
|
from django.db.models import Manager
|
|
|
|
|
|
|
|
class UserManager(BaseUserManager):
|
|
|
|
def create_user(
|
|
self,
|
|
email: str = None,
|
|
# fullname: str = None,
|
|
password: str = None,
|
|
**extra_fields
|
|
):
|
|
email = UserManager.normalize_email(email)
|
|
user = self.model(
|
|
email=email,
|
|
# fullname=fullname,
|
|
**extra_fields
|
|
)
|
|
user.set_password(password)
|
|
user.save(using=self._db)
|
|
return user
|
|
|
|
def create_superuser(self, email, password, **extra_fields):
|
|
user = self.create_user(
|
|
email=email,
|
|
password=password,
|
|
**extra_fields
|
|
)
|
|
user.is_admin = True
|
|
user.is_staff = True
|
|
user.is_superuser = True
|
|
user.is_active = True
|
|
user.user_type="super_admin"
|
|
user.save(using=self._db)
|
|
return user
|
|
|
|
|
|
def change_user_type(self, user, new_user_type):
|
|
"""تغییر نوع کاربر - deprecated، از add_role استفاده کنید"""
|
|
group_name = f"{new_user_type.capitalize()} Group"
|
|
if user.user_type != new_user_type and not user.groups.filter(name=group_name).exists():
|
|
|
|
user.user_type = new_user_type
|
|
new_group, _ = Group.objects.get_or_create(name=group_name)
|
|
user.groups.add(new_group)
|
|
user.save()
|
|
return user
|
|
return None
|
|
|
|
def add_user_role(self, user, role_name):
|
|
"""اضافه کردن نقش جدید به کاربر بدون حذف نقشهای قبلی"""
|
|
user.add_role(role_name)
|
|
return user
|
|
|
|
def remove_user_role(self, user, role_name):
|
|
"""حذف نقش خاص از کاربر"""
|
|
user.remove_role(role_name)
|
|
return user
|
|
|
|
|
|
|
|
class ProfessorUserManager(UserManager):
|
|
def get_queryset(self):
|
|
return super().get_queryset().filter(user_type="professor")
|
|
|
|
|
|
class ClientUserManager(UserManager):
|
|
def get_queryset(self):
|
|
return super().get_queryset().filter(user_type="client")
|
|
|
|
class AdminUserManager(UserManager):
|
|
def get_queryset(self):
|
|
return super().get_queryset().filter(user_type="admin")
|
|
|
|
|
|
class SuperAdminUserManager(UserManager):
|
|
def get_queryset(self):
|
|
return super().get_queryset().filter(user_type="super_admin")
|
|
|
|
class StudentUserManager(UserManager):
|
|
def get_queryset(self):
|
|
return super().get_queryset().filter(user_type="student")
|