Пользовательские разрешения DRF для 1 просмотра для пользователей auth и неавторизованных

#django #django-rest-framework

#django #django-rest-framework

Вопрос:

Идея в том, что пользователь, не являющийся пользователем, может получить только представление (список, извлечение). Пользователь с правами доступа может ПОЛУЧАТЬ, ПУБЛИКОВАТЬ, ИСПРАВЛЯТЬ, удалять.

Как я могу сделать это в пользовательском разрешении?

мой взгляд:

 class BookViewSet(viewsets.ModelViewSet):
    permission_classes = (IsAuthenticated,)
    serializer_class = serializers.BookSerializer

    def get_queryset(self):
        return Book.objects.filter(user=self.request.user)
  

Ответ №1:

Вы можете сделать это, расширив базовый класс permissions.BasePermission

 from rest_framework import permissions
class IsAuthorOrReadOnly(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        if request.method in permissions.SAFE_METHODS:
            return True
        return obj.user == request.user
  

а затем используйте это как класс разрешений permission_classes =(IsAuthorOrReadOnly,)