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.
83 lines
2.3 KiB
83 lines
2.3 KiB
|
|
from django.contrib.auth.models import BaseUserManager
|
|
|
|
|
|
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, fullname, password):
|
|
user = self.create_user(
|
|
email=email,
|
|
fullname=fullname,
|
|
password=password,
|
|
)
|
|
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, new_user_type):
|
|
# حذف گروههای فعلی
|
|
old_group_name = f"{self.user_type.capitalize()} Group"
|
|
old_group = Group.objects.filter(name=old_group_name).first()
|
|
if old_group:
|
|
self.groups.remove(old_group)
|
|
|
|
# تغییر نوع کاربر
|
|
self.user_type = new_user_type
|
|
|
|
# افزودن گروه جدید
|
|
new_group_name = f"{new_user_type.capitalize()} Group"
|
|
new_group, _ = Group.objects.get_or_create(name=new_group_name)
|
|
self.groups.add(new_group)
|
|
|
|
# ذخیره تغییرات
|
|
self.save()
|
|
|
|
|
|
|
|
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")
|