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

回到顶部