【问题标题】:User can update or delete data which created by others用户可以更新或删除他人创建的数据
【发布时间】:2019-11-21 05:37:22
【问题描述】:
class StoryViewSet(viewsets.ModelViewSet):
serializer_class = StorySerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
我有所有 CRUD 功能的视图集。问题是用户可以编辑或删除另一个用户的故事,我在permissions 中找到了DjangoModelPermissionsOrAnonReadOnly,但我什至无法创建。我在Storymodel 中使用author 作为foreign key。我也在使用rest_framework.authtoken。所以,我认为有两个选择,创建自己的权限或重写一些权限。哪个更好?
【问题讨论】:
标签:
python
django
django-rest-framework
【解决方案1】:
编写客户对象级权限。这是一个例子:
class IsOwnerOrReadOnly(permissions.BasePermission):
"""
Object-level permission to only allow owners of an object to edit it.
"""
def has_object_permission(self, request, view, obj):
# Read permissions are allowed to any request,
# so we'll always allow GET, HEAD or OPTIONS requests.
if request.method in permissions.SAFE_METHODS:
return True
return obj.author == request.user
并将其包含在permission_classes 列表中。