Ответ
Классы разрешений (Permission classes) в Django REST Framework (DRF) — это основной механизм для определения и принудительного применения политик доступа к эндпоинтам API.
Они определяют, имеет ли аутентифицированный (или анонимный) пользователь право выполнять определенное действие (например, GET, POST, DELETE) над объектом.
Ключевые задачи:
- Гранулярный контроль доступа: Позволяют создавать гибкие правила. Например, разрешить чтение всем, а редактирование — только автору записи или администратору.
- Переиспользование логики: Правила доступа выносятся в отдельные классы, которые можно применять к разным
View. - Безопасность: Защищают данные от несанкционированного доступа и модификации.
Как это работает:
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"})