我试图找到一种在视图集上创建自定义权限的方法。 我想实现这样的事情:
class ActivityViewSet(viewsets.ModelViewSet):
queryset = Activity.objects.all()
serializer_class = ActivitySerializer
if request.method == 'PUT':
permission_classes = (permissions.IsOwner)
elif request.method == 'LIST':
permission_classes = (permissions.IsAdmin)
else :
permission_classes = (permissions.AllowAny)
IE:按方法排序权限。 (上面的代码不起作用"请求"未被识别)
无法在"自定义权限"中找到任何用途。文档的一部分,但也许我只是盲目。 (重写BasePermission?怎么样?谁?在哪里?)
谢谢:)
答案 0 :(得分:5)
Viewsets使用action
来确定HTTP是从get_permissions
方法调用的动词和权限,因此您可以覆盖它:
class ActivityViewSet(viewsets.ModelViewSet):
queryset = Activity.objects.all()
serializer_class = ActivitySerializer
def get_permissions(self):
if self.action == 'update':
return IsOwner()
elif self.action == 'list':
return IsAdminUser()
else :
return AllowAny()
答案 1 :(得分:0)
在同一问题上花费了一些钱。这是DRF 3+的解决方案
class ActivityViewSet(viewsets.ModelViewSet):
"""ViewSet for viewing and editing client's accounts."""
queryset = Activity.objects.all()
serializer_class = ActivitySerializer
def get_permissions(self):
"""Set custom permissions for each action."""
if self.action in ['update', 'partial_update', 'destroy', 'list']:
self.permission_classes = [IsAuthenticated, ]
elif self.action in ['create']:
self.permission_classes = [AllowAny, ]
return super().get_permissions()
确保Permission_classes是一个列表。