问题描述
我试图为我的视图创建一个自定义权限,该权限允许对QuerySet中的模型所有者的读写权限,但不允许对其他用户或未经身份验证的用户进行任何权限/请求。
来源: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
不幸的是,看来我的观点甚至没有调用我的自定义权限类。 (我导入了它,等等。)如果我使用默认的类似permissions.isAuthenticatedOrReadOnly
的替代我的自定义权限类,则使用它。我在这里想念什么?
谢谢。
解决方法
has_object_permission
方法仅在对象上调用,而不在查询集上调用,这意味着在列表请求中不会调用它。
您的视图仅具有列表和创建终结点,都不使用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)