我有一个views.py,如下所示,
from webapi.permissions import IsOwner
class MemberDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = members.objects.all()
serializer_class = MemberSerializer
permission_classes = (permissions.IsAdminUser,IsOwner)
以下是自定义权限,以检查用户是否是webapi.permissions中的对象的权力,
class IsOwner(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
return obj.owner == request.user
现在的问题是检查他是否是管理员用户并授予更新/删除权限,但如果所有者是用户,则实际上应该授予编辑数据的权限,但在这种情况下它是失败的。
看到问题" Django Rest Framework won't let me have more than one permission"我尝试如下,当我使用Or时,它仍然不起作用,
class MemberDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = members.objects.all()
serializer_class = MemberSerializer
permission_classes = (Or(permissions.IsAdminUser,IsOwner))
如果我使用或者它在运行时失败并且错误,那么"'条件'对象不可迭代"
答案 0 :(得分:3)
如果您只需要为管理员和所有者用户授予编辑权限,则可以实现自定义权限类:
class IsOwnerOrAdmin(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True
return obj.owner == request.user or request.user.is_admin
在视图中只使用这个:
permission_classes = [IsOwnerOrAdmin]
此方法记录在案here。
答案 1 :(得分:2)
您正在使用元组语法,但您需要使用逗号作为元组
更换
permission_classes = (Or(permissions.IsAdminUser,IsOwner))
与
permission_classes = (Or(permissions.IsAdminUser,IsOwner), )
答案 2 :(得分:1)