Для чего в Django REST Framework используются классы разрешений (Permission classes)

Ответ

Классы разрешений (Permission classes) в Django REST Framework (DRF) — это основной механизм для определения и принудительного применения политик доступа к эндпоинтам API.

Они определяют, имеет ли аутентифицированный (или анонимный) пользователь право выполнять определенное действие (например, GET, POST, DELETE) над объектом.

Ключевые задачи:

  1. Гранулярный контроль доступа: Позволяют создавать гибкие правила. Например, разрешить чтение всем, а редактирование — только автору записи или администратору.
  2. Переиспользование логики: Правила доступа выносятся в отдельные классы, которые можно применять к разным View.
  3. Безопасность: Защищают данные от несанкционированного доступа и модификации.

Как это работает:

DRF проверяет разрешения, вызывая методы .has_permission() (для доступа к представлению) и .has_object_permission() (для доступа к конкретному объекту).

Пример: Только администратор может редактировать

from rest_framework.permissions import BasePermission, SAFE_METHODS

class IsAdminUserOrReadOnly(BasePermission):
    """
    Разрешает полный доступ администраторам и доступ только для чтения 
    (GET, HEAD, OPTIONS) всем остальным пользователям.
    """
    def has_permission(self, request, view):
        # Разрешить безопасные методы всем
        if request.method in SAFE_METHODS:
            return True

        # Разрешить любые методы, если пользователь — администратор
        return bool(request.user and request.user.is_staff)

# Применение в View
from rest_framework.views import APIView
from rest_framework.response import Response

class MyDataView(APIView):
    permission_classes = [IsAdminUserOrReadOnly]

    def get(self, request):
        return Response({"data": "some public data"})

    def post(self, request):
        # Этот метод будет доступен только администраторам
        return Response({"status": "data created"})