Аутентификация по определенному методу для общих представлений API - PullRequest
0 голосов
/ 28 июня 2018

Я использовал ListCreateAPIView и RetrieveUpdateDestroyAPIView для модели. Теперь я хочу добавить JWT аутентификацию только к Обновлению и уничтожению части в RetrieveUpdateDestroyAPIView. Как я могу это сделать?


Позвольте мне прояснить мой вопрос. У меня есть модель с именем Post. Теперь всем пользователям разрешено просматривать сообщение, но обновление, удаление доступно только пользователю, который его создал. И я хочу использовать Аутентификация JWT .

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

мы можем переопределить метод get_authenticators и не забудьте добавить authentication_classes в представление API.

def get_authenticators(self):
    if self.request.method in ['PUT', 'DELETE']:
        return [auth() for auth in self.authentication_classes]
    else:
        return [] 

Для обновления вашего вопроса нам нужно добавить разрешения уровня объекта, как показано ниже

class OwnerRequiredPermission(object):

     def has_object_permission(self, request, obj):
          return obj.created_by == request.user

добавить вышеуказанный класс разрешений к permission_classes

0 голосов
/ 28 июня 2018

Вы можете написать Пользовательское разрешение Класс для этого:

from rest_framework import permissions

class CustomPermission(permissions.BasePermission):
    def has_permission(self, request, view):
        if view.action in ('update', 'destroy'):
            return request.user.is_authenticated
        return True

И используйте по вашему мнению:

class ExampleView(RetrieveUpdateDestroyAPIView):
    permission_classes = (CustomPermission,)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...