Разрешение Isadminuser или Allowyany на основе метода запроса в APIView
Мне нужно создать пользовательский класс разрешения на основе метода запроса и переданного slug. Я использую APIView для написания бизнес-логики. Требования следующие:
1. Разрешить все методы, кроме POST.
2. IsAdminUser для POST, если slug - abc или Allowany, если slug - xyz.
Мое представление выглядит следующим образом:
class Example(APIView):
permission_classes = [CustomPermission]
def get_by_slug(self, slug):
return Example.objects.filter(slug=slug).first()
def get(self, request, *args, **kwargs):
slug = kwargs.get("slug")
example = self.get_by_slug(slug)
serializer = ABCSerializers(example)
return Response(serializer.data)
def post(self, request, *args, **kwargs):
slug = kwargs.get("slug")
setting = self.get_by_slug(slug)
if slug == 'abc':
........................................
/////////////////////////////////
Для этого я должен определить Custompermission, которое наследуется от BasePermission
class CustomPermission(BasePermission):
"""
returns permission based on the request method and slug
"""
def has_permission(self, request, view):
user =request.user
if request.method == 'POST' and slugs == 'abc':
return True
Теперь я не знаю, как получить slug здесь. Здесь slug приобретается в форме **kwargs. Но kwargs не может быть определен внутри has_permission. Как мы можем это сделать?
Вы можете извлечь slug
из request.data
:
if request.method == 'POST' and request.data["slug"] == 'abc':
return True
Мы можем извлечь slug из объекта запроса в таких функциях, как эта:
slug = request.resolver_match.kwargs["slug"]
ИЛИ
slug = request.resolver_match.kwargs.get("slug")