Разрешение 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")
Вернуться на верх