Что такое PermissionRequiredMixin в Django

Ответ

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: Определяет поведение при отказе в доступе для аутентифицированного пользователя.