如何在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
我有模型新闻的视图集。
我想做下一个权限: 所有人都能看到新闻。 只有授权用户和管理员才能创建新闻。 只有所有者和管理员可以更新新闻。 只有管理员可以删除新闻。
如何为每个操作设置不同的权限?对于创建,我想使用: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