Разрешение на основе действия/url в Django rest framewrok

У меня есть класс Modelviewset, в котором есть несколько функций, таких как list(), destroy, partial_update(), а также другие пользовательские функции, например def get_examples(self,request). Дело в том, что разные функции имеют разные разрешения, основанные на типах пользователей. У меня есть отдельный класс разрешений внутри файла разрешений. Теперь мне нужно получить доступ к действию внутри функции has_permission. Я знаю, что это можно сделать внутри функции get_permission внутри класса modelviewset. Но как это сделать внутри функции has_permission?

Мое мнение:

class ExampleView(viewsets.ModelViewSet):
    queryset = Example.objects.all().order_by("-created_at")
    serializer_class = ExampleSerializer
    
    pagination_class = ExampleNumberPagination
    
    def list(self, request, *args, **kwargs):        

    def partial_update(self, request, *args, **kwargs):        

    def custom_fuctin_1(self,request,*args,**kwargs):
    def custom_fuctin_2(self,request,*args,**kwargs):   

    def destroy(self, request, *args, **kwargs):

Теперь разрешите файл:

class ExampleClassPermission(BasePermission):

    def has_permission(self, request, view):

        user =request.user
        if request.method == 'GET' or request.method == 'POST':
            return True
        elif request.method == 'DELETE' and (user.role == 'manager' or user.role ==  'admin'):
            return True
        elif request.method == 'PUT':
            return True
        else:
            return False

Здесь в этом классе разрешения я хочу установить разрешение для пользовательской функции_1 и 2 в классе представления. Я не могу сделать self.action == ''? так же как в get_permission.Can I???

Вы можете получить доступ к действию, используя аргумент view:

class ExampleClassPermission(BasePermission):

    def has_permission(self, request, view):
       if view.action == 'list':
           # your code here
Вернуться на верх