has_object_permission 在 `(object)-detail` URLS 中根本没有被调用

has_object_permission not being called at all in `(object)-detail` URLS

我的问题是 has_object_permission() 被忽略了。即使我以正确的用户登录访问 http://127.0.0.1:8000/portfolios/3/,它仍然默认为 has_permission()。我做错了什么吗?

视图集class:

class PortfolioViewSet(viewsets.ModelViewSet):
    queryset = Portfolio.objects.all()
    serializer_class = serializers.PortfolioSerializer
    permission_classes = (permissions.IsPortfolioOwner, )

权限Class:

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_permissionhas_permission 必须 return True。如果它 returns False,那么权限检查将短路,请求将被拒绝。

您当前的权限 class 将只允许超级用户查看列表。并且在他们是超级用户的情况下无法查看单个对象并且查看当前用户的对象。