Ответ
PermissionRequiredMixin
— это стандартный миксин в Django, который позволяет ограничить доступ к class-based views (CBV) на основе прав (permissions) пользователя.
Если у пользователя, обращающегося к view, нет требуемых прав, миксин либо перенаправляет его на страницу входа (если он не аутентифицирован), либо возвращает ошибку 403 Forbidden.
Как это работает:
Миксин должен быть указан в списке наследования перед основным классом представления (например, ListView
).
Пример использования:
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.views.generic import ListView
from .models import Article
class ArticleListView(PermissionRequiredMixin, ListView):
# Требуемое право в формате 'app_label.codename'
# Например, 'news.view_article'
permission_required = 'news.view_article'
# Если True, при отказе в доступе будет вызвано исключение PermissionDenied (403)
# Если False (по умолчанию), анонимный пользователь будет перенаправлен на LOGIN_URL
raise_exception = True
model = Article
template_name = 'news/article_list.html'
Важные атрибуты:
permission_required
: Строка с одним правом или кортеж/список строк для нескольких прав. В последнем случае пользователь должен обладать всеми указанными правами.login_url
: URL для перенаправления, если пользователь не аутентифицирован.raise_exception
: Определяет поведение при отказе в доступе для аутентифицированного пользователя.