Как установить разрешения для 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,)
Вы можете использовать готовое разрешение или создать собственный класс разрешения