未调用 Django REST Framework 视图权限
Django REST Framework view permissions not called
我正在尝试为我的视图创建自定义权限,允许对 QuerySet 中模型的所有者进行读写权限,但不允许对其他用户或未经身份验证的用户有任何 permission/request 权限。
Source: https://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/
查看:
class My_classListCreateAPIView(generics.ListCreateAPIView):
queryset = Model.objects.all()
serializer_class = ModelSerializer
permission_classes = [IsModelOwner]
权限:
class IsModelOwner(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
# Permissions are only allowed to the owner of the model and admins.
if request.user.is_staff == True:
return True
return obj.owner == request.user
不幸的是,我的视图似乎甚至没有调用我的自定义权限 class。 (我导入它等)如果我没有使用我的自定义权限 class,我会使用像 permissions.isAuthenticatedOrReadOnly
这样的默认权限来代替。我在这里错过了什么?
谢谢。
has_object_permission
方法仅在对象上调用,在查询集上不调用,这意味着在列表请求上不会调用它。
您的视图只有 list 和 create 端点,它们都不使用 object_permissions,请改用 has_permission
。
但是我相信你想要做的实际上是使用 isAuthenticated 权限结合修改后的 get_queryset 在你看来
class My_classListCreateAPIView(generics.ListCreateAPIView):
queryset = Model.objects.all()
serializer_class = ModelSerializer
permission_classes = [isAuthenticated]
def get_queryset(self):
return Model.objects.filter(owner=self.request.user)
我正在尝试为我的视图创建自定义权限,允许对 QuerySet 中模型的所有者进行读写权限,但不允许对其他用户或未经身份验证的用户有任何 permission/request 权限。
Source: https://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/
查看:
class My_classListCreateAPIView(generics.ListCreateAPIView):
queryset = Model.objects.all()
serializer_class = ModelSerializer
permission_classes = [IsModelOwner]
权限:
class IsModelOwner(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
# Permissions are only allowed to the owner of the model and admins.
if request.user.is_staff == True:
return True
return obj.owner == request.user
不幸的是,我的视图似乎甚至没有调用我的自定义权限 class。 (我导入它等)如果我没有使用我的自定义权限 class,我会使用像 permissions.isAuthenticatedOrReadOnly
这样的默认权限来代替。我在这里错过了什么?
谢谢。
has_object_permission
方法仅在对象上调用,在查询集上不调用,这意味着在列表请求上不会调用它。
您的视图只有 list 和 create 端点,它们都不使用 object_permissions,请改用 has_permission
。
但是我相信你想要做的实际上是使用 isAuthenticated 权限结合修改后的 get_queryset 在你看来
class My_classListCreateAPIView(generics.ListCreateAPIView):
queryset = Model.objects.all()
serializer_class = ModelSerializer
permission_classes = [isAuthenticated]
def get_queryset(self):
return Model.objects.filter(owner=self.request.user)