我遇到一个问题,has_object_permission()
被忽略了。即使我使用登录的正确用户访问http://127.0.0.1:8000/portfolios/3/
,它仍然默认为has_permission()
。我做错了吗?
ViewSet类:
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
答案 0 :(得分:0)
为了检查has_object_permission
,has_permission
必须返回True
。如果它返回False
,则权限检查将短路,请求将被拒绝。
您当前的权限类只允许用户查看列表(如果他们是超级用户)。并且在查看当前用户对象的超级用户和下无法查看单个对象。