我想在我的 django rest 框架视图上使用 django Guardian 设置自定义权限。我已经成功地实现了它RetrieveModelMixin
,但不是ListModelMixin
。
我有一个看起来像这样的权限类:
class CustomPerm(permissions.BasePermission):
def has_permission(self, request, view):
return request.user and request.user.is_authenticated()
def has_object_permission(self, request, view, object):
if request.method == 'GET':
if object.public is True:
return True
if object.user.is_staff is True:
return True
if 'read_object' in get_perms(request.user, object):
return True
return False
if request.method == 'POST':
#...
我还在这里简化了视图:
@authentication_classes((TokenAuthentication, SessionAuthentication, BasicAuthentication,))
@permission_classes((CustomPerm,))
class ObjectView(ListModelMixin,
RetrieveModelMixin,
viewsets.GenericViewSet):
queryset = myObject.objects.all()
serializer_class = ObjectSerializer
我天真地期待的行为:ListModelMixin
可以根据 CustomPermhas_object_permission
规则自行过滤对象。
但它不是那样工作的。我可以通过编写一个get_queryset
方法并应用我的自定义权限规则来做我想做的事,但这似乎不合适而且很糟糕。
有没有更好的办法 ?谢谢 :)
PS:我确定我遗漏了一些东西,我的问题很幼稚,但我看不出是什么。