Аутентификация Django Rest Framework в viewsets.ViewSet - нужны разные разрешения для каждого метода

У меня возникла проблема с Django REST Framework и viewsets.ViewSet. Я пытаюсь использовать декоратор @permission_classes для защиты определенных методов внутри ViewSet, но, похоже, это работает не так, как ожидалось. Когда я применяю декоратор, все методы требуют аутентификации, даже если я указываю другие разрешения для других методов. Однако если я устанавливаю атрибут permission_classes в верхней части ViewSet, все работает как ожидалось, но мне нужны разные разрешения для каждого метода.

У вас есть совет, как мне добиться разрешений на уровне методов в наборе ViewSet?

from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticated, AllowAny
from rest_framework.decorators import action, permission_classes
from rest_framework.response import Response

class ProjectViewSet(viewsets.ViewSet):

    # Works as expected: all methods require authentication
    permission_classes = (IsAuthenticated,)

    @action(detail=False, methods=['get'], url_path='my')
    def list_investors_projects(self, request):
        # This method should be protected but allows access without authentication
        data = {
            'message': "This is a custom GET method!",
            'status': 'success'
        }
        return Response(data)

    @action(detail=False, methods=['get'], url_path='public', permission_classes=[AllowAny])
    def public_projects(self, request):
        # This method allows public access
        data = {
            'message': "Public projects",
            'status': 'success'
        }
        return Response(data)

Я попробовал использовать декоратор @permission_classes над методом list_investors_projects для требования аутентификации и пользовательских разрешений. Я ожидал, что этот конкретный метод будет требовать аутентификации, а другие методы в наборе ViewSet - нет. Однако даже с декоратором метод разрешает доступ без аутентификации.

Я также попробовал установить атрибут permission_classes в верхней части ViewSet на (IsAuthenticated,), и хотя это обеспечило безопасность всех методов, это не позволило мне указать различные разрешения для отдельных методов.

Я ожидаю, что разрешения на уровне метода в наборе ViewSet позволят мне контролировать доступ в зависимости от цели метода. Что я упускаю или делаю неправильно?

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