Пользовательские разрешения в django не работают
Я хочу добавить пользовательские разрешения:
- Только администратор и владелец объекта могут изменять объект
- Все зарегистрированные пользователи могут просматривать объекты
Мое решение:
SAFE_METHODS = ('GET', 'HEAD', 'OPTIONS')
class IsApplicationAdmin(permissions.BasePermission):
def has_permission(self, request, view):
if request.user.is_authenticated:
if request.user.is_superuser or request.user.user_type == "Admin":
return True
if request.method in SAFE_METHODS:
return True
def has_object_permission(self, request, view, obj):
if request.method in SAFE_METHODS:
return True
return obj.user_name == request.user # owner can modify the object
PROBLEM -- для запроса PATCH (частичное обновление) http://127.0.0.1:8000/api/admin_panel/users/2/ у меня такая ошибка
{
"detail": "You do not have permission to perform this action."
}
Я отлаживал код и вижу журнал отладки только в has_permission (в has_object_permission журнала нет)
Что нужно исправить?
Я читал https://www.django-rest-framework.org/api-guide/permissions/#custom-permissions и в таблице было сказано, что запрос PATH относится к разрешениям на объекты
Пользовательские разрешения и аутентификация должны быть проверены следующим образом
from rest_framework import permissions
from rest_framework.permissions import IsAuthenticated
class IsApplicationAdmin(IsAuthenticated):
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS or request.user.is_superuser:
return True
return obj.user_name == request.user.username # I think you want to check usernames here because on left side its obj.user_name ?
Пожалуйста, попробуйте использовать этот подход и затем дайте мне знать, если есть какая-то проблема.