Как установить разрешения для CRUD-операций в ModelViewSet Django

У меня есть набор представлений для модели News.

Я хочу сделать следующие разрешения: Все люди могут видеть новости. Только авторизованные пользователи и администратор могут создавать новости. Только владелец и администратор могут обновлять новости. Только администратор может удалять новости.

Как я могу установить различные разрешения для каждой операции? Для создания я хочу использовать: IsAuthenticated и IsAdminUser. Для обновления я хочу использовать IsAdminUser и создаю собственное разрешение для владельца. Для удаления я хочу использовать также IsAdminUser.

view:

class NewsViewSet(viewsets.ModelViewSet):
    queryset = News.objects.all()
    serializer_class = NewsSerializer

разрешение:

class IsOwnerOrReadOnly(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        if request.method in permissions.SAFE_METHODS:
            return True

        return obj.author == request.user
class Viewset(BaseModelViewSet):enter code here
queryset = Model.objects.all()
serializer_class = ModelSerializer
permission_classes_by_action = {
    'create': (permissions.IsAdminUser,),
    'list': (permissions.IsAuthenticatedOrReadOnly,),
    'retrieve': (permissions.AllowAny,),
    'update': (permissions.AllowAny,),
    'destroy': (permissions.IsAdminUser,),
    'search': (permissions.IsAuthenticated,)  

Вы можете использовать готовое разрешение или создать собственный класс разрешения

Вернуться на верх