Сайт Django Admin с различными разрешениями и ролями суперпользователя
В дополнение к суперпользователю по умолчанию, который имеет доступ ко всем приложениям в проекте и все разрешения, я хочу создать еще два типа суперпользователей, Создатель имеет возможность делать все операции CRUD на всех приложениях без выполнения в базе данных в django admin , А проверяющий имеет возможность просматривать одну таблицу "операции", чтобы одобрить или отклонить эти операции.
- is superuser = True
- is_superuser with is_maker = True
- is_superuser with is_checker = True
Как я могу проверить логин пользователя в admin.py Django admin site panel для управления другими вещами ?
models.py
class User(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
is_maker = models.BooleanField(blank=True, null=True, default=False)
is_checker = models.BooleanField(blank=True, null=True, default=False)
class Operation(models.Model):
name = models.CharField(max_length=255, blank=True, null=True)
model_name = models.ForeignKey(ContentType, blank=True, null=True, on_delete=models.SET_NULL)
old_value = models.TextField(default='', null=True, blank=True)
new_value = models.TextField(default='', null=True, blank=True)
rejection_reason = models.TextField(null=True, blank=True, default='')
status = models.CharField(choices=STATUS_CHOICES, max_length=50, blank=True, null=True, default=STATUS_PENDING)
created_by = models.ForeignKey(User, blank=True, null=True, db_column='created_by', on_delete=models.CASCADE)
Вы должны переопределить стандартную таблицу auth-user, поставляемую с django, таким образом
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin
class User(AbstractBaseUser, PermissionsMixin):
name = models.CharField(max_length=50, blank=True, null=True)
username = models.CharField(max_length=100, unique=True)
email = models.EmailField(max_length=100, blank=True, null=True)
gender = models.CharField(max_length=15, blank=True, null=True)
phone_number = models.CharField(max_length=50, unique=True)
dob = models.DateField(blank=True,null=True)
.
#include everything you needed in user table
.
.
is_maker = models.BooleanField(default=False)
is_checker = models.BooleanField(default=False)
.
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
password = models.CharField(('password'), max_length=512 , blank=True, null=True)
Подробнее о замене стандартной таблицы пользователей вы можете прочитать здесь замена пользовательской модели пользователя