Пользовательские разрешения в django не работают

Я хочу добавить пользовательские разрешения:

  1. Только администратор и владелец объекта могут изменять объект
  2. Все зарегистрированные пользователи могут просматривать объекты

Мое решение:

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_permissionhas_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 ?

Пожалуйста, попробуйте использовать этот подход и затем дайте мне знать, если есть какая-то проблема.

Вернуться на верх