Похоже, в Django есть сотни способов получения одинаковых результатов в отношении авторизации и разрешений.Определенно, группы - это один способ.
Разрешения Django обычно основаны на ваших данных, поэтому «на основе таблицы» или «на основе строки».Разрешения на основе строк не являются родными для Django, вы должны либо свернуть свое собственное решение, либо использовать что-то вроде django-guardian или django-Authority Подробнее здесь .
Документы на разрешения здесь
class Quiz(models.Model):
title = models.CharField(max_length=64)
class Meta:
permissions = (
("can_take_quiz", "Can take quiz"),
("can_grade_quiz", "Can Grade Quiz"),
)
С этой моделью и этими разрешениями вы могли видеть, что, возможно, помощнику учащегося будет предоставлено разрешение на оценку определенного теста, или тест для данного учителя, этотгде бы основанные на строке разрешения были бы полезны.Реализация чего-то подобного (через has_permission) может решить проблему (и является более явной), чем просто добавление пользователя в группу.
Вы можете добавить пользователей в группы, которые у вас уже есть, и затем передать эту группу целиком.разрешения на добавление теста или оценки (учителя могут добавлять / редактировать / удалять / оценивать, учащиеся могут проходить тесты) и проверять на основе этого.
тогда ваш user_passes_test будет user.has_perm('quiz.take_quiz')
или вместодекоратор, вы можете передать конкретную викторину в бэкэнд на основе вашего объекта.