Переопределить права доступа и классы аутентификации в методе списка ViewSet - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь установить определенные c классы аутентификации и разрешений в ListModelMixin набора. Я попробовал следующее, но это не работает:

    def list(self, request):
        self.authentication_classes = (apiauth.SessionAuthentication, )
        self.permission_classes = (permissions.IsAuthenticated, )
        return super(TestViewSet, self).list(request)

Я что-то не так делаю?

1 Ответ

0 голосов
/ 13 января 2020

Когда ваш запрос достигает функции list, это означает, что он уже прошел и этапы аутентификации и разрешения.

Если вы используете одни и те же классы для разрешения и аутентификации для всех действий на вашем ViewSet вы должны определить их в объявлении класса:

class MyViewSet(viewsets.ViewSet):

    authentication_classes = (apiauth.SessionAuthentication,)
    permission_classes = (permissions.IsAuthenticated,)

Если вы пытаетесь использовать разные классы аутентификации / разрешений для действия list, вы можете переопределить get_authenticators и get_permissions методы:

class MyViewSet(viewsets.ViewSet):

    ...

    def get_authenticators(self):
        if self.action == 'list':
            # Set up here
            return YourAuthenticators
        return super().get_authenticators()

    def get_permissions(self):
        if self.action == 'list':
            # Set up here
            return YourPermissions
        return super().get_permissions()
...