Заменяет ли каркас rest @action kwargs значения классов или нет? - PullRequest
0 голосов
/ 03 июля 2019

Я пытался найти ответ на этот вопрос в документах по остальным фреймворкам или в стеке, но я не смог его найти.

Предположим, набор настроек остальной структуры:

class MyModelViewSet(ModelViewSet):
    authentication_classes = [JWTAuthentication]
    permission_classes = [IsAuthenticated]

    @action(
        detail=True,
        permission_classes=[],
        authentication_classes=[],
    )
    def extra_action(self, request, pk=None):
        return Response()

в этом случае действие extra_action не будет иметь ни прав доступа, ни классов аутентификации, либо они будут определены на уровне класса? что произойдет, если я переопределю метод get_permissions?

class MyModelViewSet(ModelViewSet):
    authentication_classes = [JWTAuthentication]
    permission_classes = [IsAuthenticated]

    def get_permissions(self):
        permission_classes = self.permission_classes[:]
        if self.action == 'extra_action':
            permission_classes.append(MyPermissionClass)

        return [permission() for permission in permission_classes]

    @action(
        detail=True,
        permission_classes=[],
        authentication_classes=[],
    )
    def extra_action(self, request, pk=None):
        return Response()

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 03 июля 2019

self.permission_classes[:] приводит к разрешениям, которые вы установили для своего действия. В этом случае это приводит к [], так как вы оставили его пустым.

Из вашего кода метод get_permissions проверит IsAuthenticated для всех действий, но для extra_action будет проверено только действие MyPermissionClass.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...