【发布时间】:2017-01-16 10:47:24
【问题描述】:
我有以下视图集:
class ActivityViewSet(viewsets.ModelViewSet):
queryset = Activity.objects.all()
serializer_class = ActivitySerializer
def get_permissions(self):
if self.action in ['update','partial_update','destroy','list']:
self.permission_classes = [permissions.IsAdminUser,]
elif self.action in ['create']:
self.permission_classes = [permissions.IsAuthenticated,]
else :
self.permission_classes = [permissions.AllowAny,]
return super(self.__class__, self).get_permissions()
正如所见,我试图为经过身份验证的用户(不是管理员)允许“创建”方法而不允许“列表”。 奇怪的是,这个 Viewset 没有为 Authenticated 用户创建或列出。 我检查了一下,只是为了得出结论,下面的代码:
class RouteOrderingDetail(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.DestroyModelMixin,
mixins.UpdateModelMixin,
viewsets.GenericViewSet):
queryset = RouteOrdering.objects.all()
serializer_class = RouteOrderingSerializer
这确实允许视图中存在创建但没有列表(但它对我不可用,因为我确实需要可用的列表选项。
希望问题很清楚。如有任何帮助,我们将不胜感激。
【问题讨论】:
-
我确实做了自定义权限,您可以在代码中清楚地看到。问题不止于此。
-
您没有创建自定义权限类。您已经在视图集中编辑了
get_permissions方法。自定义权限类将允许您根据request.method返回权限 -
我将如何创建自定义权限类?我试过这样做,但没有找到任何例子。应该在哪里上课?我如何参考它?等
-
我实际上是这样检查的——它也不允许。
标签: python django permissions django-rest-framework