В настоящее время у меня есть проект, который содержит разные уровни пользователей. Обычно, по моему прошлому опыту, я разрабатывал системы с использованием Django только с двумя уровнями пользователя: суперпользователем и обычным/обычным пользователем. Итак, мой вопрос: Каковы эффективные способы представления этих различных уровней пользователей в модели/базе данных? Здесь я собираюсь использовать школьную систему в качестве примера, а также изложить некоторые из моих первоначальных мыслей. по его реализации.
Уровни пользователей:
- Администратор (суперпользователь и персонал)
- Руководитель
- Преподаватель
- Учащиеся
Код: Выделить всё
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
user = models.CharfieldField(max_length = 10, unique = True)
class Admin(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
class Pricipal(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
class Teacher(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
class Student(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
Код: Выделить всё
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
user = models.CharfieldField(max_length = 10, unique = True)
is_superuser = models.BooleanField(default = False)
is_staff = models.BooleanField(default = False)
is_principal = models.BooleanField(default = False)
is_teacher = models.BooleanField(default = False)
is_student = models.BooleanField(default = False
'''
User table in DB:
user | is_superuser | is_staff | is_principal | is_teacher | is_student
'''
В методе №1, поскольку встроенная модель пользователя имеет два поля, is_staff и is_superuser. Можно ли реализовать/изменить поля в таблице SuperUser/Admin, как в примере выше? Это означает, что когда я создаю администратора/суперпользователя, я хочу, чтобы он добавлял новую строку в таблицу администраторов вместо добавления нового пользователя и обновления полей is_superuser и is_staff пользователя до 1 во встроенной модели пользователя.
В методе №2 проблема в том, что к нему напрямую подключаются таблицы с разными правами доступа. Например, модель «Зарплата» (к которой пользователь «Студент» не имеет доступа) имеет прямую связь с моделью «Пользователь» (содержит пользователя «Студент»).
Я надеюсь, что смогу получить некоторые идеи, а также правильный эффективный способ реализации этого, чтобы предотвратить любые неудобства и ошибки реализации в будущем. Спасибо большое.
Подробнее здесь: https://stackoverflow.com/questions/610 ... oles-types