如何在ModelViewSet Django中设置CRUD操作的权限

How to set permissions for CRUD operations in ModelViewSet Django

我有模型新闻的视图集。

我想做下一个权限: 所有人都能看到新闻。 只有授权用户和管理员才能创建新闻。 只有所有者和管理员可以更新新闻。 只有管​​理员可以删除新闻。

如何为每个操作设置不同的权限?对于创建,我想使用:IsAuthenticated 和 IsAdminUser。对于更新,我想使用 IsAdminUser 并为所有者创建自己的权限。对于删除,我还想使用 IsAdminUser。

查看:

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,)  

像这样你可以使用pre-built权限或创建自定义权限class