因此,我正在使用 DRF 编写我的第一个项目,并且在为我的视图集设置权限时遇到了一些问题。我已经使用 djangorestframework-jwt 进行了身份验证。目前,我定义了几个不同的 ViewSet。我想做的是允许模型对象的所有者对该对象进行他们想要的任何更改,但阻止其他人(除了管理员)甚至查看对象。基本上,我需要一种将权限类应用于特定方法的方法,以仅允许管理员查看“列表”、所有者“更新、销毁等”以及经过身份验证的用户“创建”。目前我有这样的事情:
class LinkViewSet(viewsets.ModelViewSet):
queryset = Link.objects.all()
serializer_class = LinkSerializer
有一个模型
class Link(models.Model):
name = models.CharField(max_length=200)
url = models.URLField()
# another model with a OneToMany relationship
section = models.ForeignKey('homepage.LinkSection', related_name='links', on_delete=models.CASCADE
owner = models.ForeignKey('homepage.UserProfile'), related_name='links', on_delete=models.CASCADE)
以及我要应用的权限类
class IsOwner(permissions.BasePermission):
def has_object_permissions(self, request, view, obj):
return obj.owner == request.user.userprofile
我确信可以通过编写完全自定义的视图来实现这一点,但我有一种直觉,有一种更简单的方法可以做到这一点,特别是因为这基本上是我完成 API 所要做的最后一件事。感谢您的帮助,如果您需要更多信息,请告诉我。