Разрешения авторизации Django для каждой модели
Я столкнулся с проблемой в Django с разрешениями авторизации (немного новичок в Django). У меня есть модели учителя, ученика и менеджера. Когда учитель посылает запрос к моему API, он должен получить другие разрешения, чем ученик (т.е. ученик будет видеть все свои оценки за тесты, в то время как учитель может видеть всех учеников своего класса, а менеджер может видеть все).
Мои вопросы следующие:
- Как сделать все мои модели действительными пользователями системы? Я пробовал добавлять
models.OneToOneField(User, on_delete=models.CASCADE)
Но для этого нужно создать пользователя, а затем назначить его учителю. Я хочу, чтобы реальный "экземпляр" учителя был используемым пользователем.
- Как мне проверить, к какому "типу" относится мой пользователь? Я должен просматривать все 3 таблицы каждый раз, когда пользователь отправляет запрос, и выяснять, к какому типу он относится? Это звучит неправильно. Я думал о создании глобальной таблицы 'user' со столбцом "type", но тогда я не смогу добавить специфические столбцы в мои модели (т.е. у студента должен быть средний балл, а у преподавателя - нет) .
Буду признателен за любые указания в нужном направлении.
Когда вам нужно несколько типов пользователей, например, в вашем случае необходимо несколько ролей, таких как студент, учитель, менеджер и т.д... тогда вам нужны разные роли для всех людей, чтобы распределить их по категориям.
Чтобы иметь эти роли, вам нужно расширить AbstractUser
(для простого случая) в вашей models.py
для вашей User
модели, как показано ниже:
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
STUDENT = 1
TEACHER = 2
MANAGER = 3
ROLE_CHOICES = (
(STUDENT, 'Student'),
(TEACHER, 'Teacher'),
(MANAGER, 'Manager'),
)
role = models.PositiveSmallIntegerField(choices=ROLE_CHOICES, blank=True, null=True)
# You can create Role model separately and add ManyToMany if user has more than one role