Django - Почему пользователь не прошел IsAdminUser, но django не выбрасывает исключение unauth?

Вот мой пример кода использования Token Authen:

class test_api(generics.GenericAPIView):
    permission_classes = (IsAdminUser, IsAuthenticated)
    def get(self,request):
        return HttpResponse("You call random test api")

Я использую Token Authen, с моим заголовком запроса следующим образом, это Token НЕ AdminUser

 Authorization : Token fc823d7a1d8973056e11e9c8b974f17e351c4263

Когда я вызываю api, он выводит из терминала эти строки

False
[23/Aug/2021 10:39:20] "GET /user/get-user HTTP/1.1" 200 13

Я предполагаю, что False получил распечатку из разрешения IsAdminUser. Однако код по-прежнему отвечает 200 и дает мне ответ You call random test api.

Только когда я указываю неправильный токен, я получаю ответ 403 Unauth.

Как документировано:

Класс разрешения IsAdminUser будет запрещать разрешение любому пользователю, если только user.is_staff не является True, в этом случае разрешение будет разрешено.

Таким образом, похоже, что пользователь для токена is_staff установлен на True. Вы можете подтвердить это, добавив следующие строки в ваш get()

def get(self, request):
    print("request.user.is_staff", request.user.is_staff)
    return HttpResponse("You call random test api")
Вернуться на верх