Разрешение на основе действия/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