has_object_permission在'(object)-detail`中根本不被调用URLS
我有一个问题,has_object_permission()
被忽略。即使当我访问http://127.0.0.1:8000/portfolios/3/
且用户登录正确时,它仍然默认为has_permission()
。难道我做错了什么?has_object_permission在'(object)-detail`中根本不被调用URLS
视图集中类:
class PortfolioViewSet(viewsets.ModelViewSet): queryset = Portfolio.objects.all()
serializer_class = serializers.PortfolioSerializer
permission_classes = (permissions.IsPortfolioOwner,)
权限类:
class IsPortfolioOwner(permissions.BasePermission): # Details
def has_object_permission(self, request, view, obj):
print("Checking for object")
ruser = request.user
if ruser is None:
return False
elif ruser == obj.client.user:
return True
def has_permission(self, request, view):
print("Checking for list")
return request.user.is_superuser
回答:
为了has_object_permission
进行检查,has_permission
必须返回True
。如果它返回False
,则权限检查将会短路并且请求将被拒绝。
您当前的权限类将只允许用户查看列表,如果他们是超级用户。并且单个对象不能在超级用户和下查看当前用户的对象。
以上是 has_object_permission在'(object)-detail`中根本不被调用URLS 的全部内容, 来源链接: utcz.com/qa/262895.html