Урок 42. Виды разрешений и сигналы
⚡ Кратко: разрешения и request.user в DRF
request.user — текущий аутентифицированный пользователь из каждого DRF-запроса. Используется в perform_create() для автоматического назначения владельца и в get_queryset() для фильтрации по владельцу.
- has_permission(request, view) — проверка на уровне всего представления
- has_object_permission(request, view, obj) — проверка на уровне конкретного объекта
- IsOwnerOrReadOnly — SAFE_METHODS разрешены всем, изменение — только владельцу
- DjangoModelPermissions — используются стандартные Django permissions (view/add/change/delete)
- Группы — набор разрешений, назначаемых сразу множеству пользователей
Частая ошибка: has_object_permission вызывается только для detail-эндпоинтов (RetrieveUpdateDestroyAPIView, detail action). Для list-эндпоинтов нужен has_permission или фильтрация в get_queryset().
📖 О чём этот урок
Урок 42 развивает тему авторизации. После знакомства с базовыми механизмами аутентификации в уроке 40 теперь изучается управление доступом: как получить текущего пользователя из запроса, как создавать собственные классы разрешений, как работают object-level permissions и как использовать встроенные Django-разрешения моделей через DjangoModelPermissions.
Что изучим
- Извлечение пользователя через
request.user— автоматическое назначение владельца и фильтрация - Object-level permissions: разница между
has_permissionиhas_object_permission - Создание кастомных классов разрешений на основе
BasePermission - Разрешения моделей Django: базовые права view/add/change/delete
- Группы разрешений: организация ролей и масштабируемое управление доступом
- Использование
DjangoModelPermissionsв DRF-представлениях
📚 Что повторить перед изучением
- ← Урок 41: Практикум 9 — практика аутентификации
- ← Урок 40: Введение в аутентификацию — IsAuthenticated, JWT, TokenAuth
- DRF Generic Views: RetrieveUpdateDestroyAPIView, perform_create
- Django модели: ForeignKey, related_name, модель User
- HTTP-методы SAFE_METHODS: GET, HEAD, OPTIONS
🎯 Что изучать дальше
- → Урок 43: Практикум 10 — практика permissions и сигналов
- Django signals: pre_save, post_save, pre_delete, post_delete — урок 45
- JWT кастомизация: дополнительные claims, кастомный токен-сериализатор
- django-guardian — object-level permissions с поддержкой групп