视图集的自定义权限
Custom permissions on viewset
我正在尝试找到一种在视图集上创建自定义权限的方法。
我想实现这样的东西:
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:按方法排序权限。 (上面的代码不起作用,因为 "request" 未被识别)
在文档的 "Custom permissions" 部分找不到任何用途,但也许我只是瞎了眼。 (覆盖 BasePermission?如何?谁?在哪里?)
谢谢:)
视图集使用 action
来确定从 get_permissions
方法调用的 HTTP 动词和权限,因此您可以覆盖它:
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()
在同一个问题上花费了一些钱。这是 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 是一个列表。
我正在尝试找到一种在视图集上创建自定义权限的方法。 我想实现这样的东西:
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:按方法排序权限。 (上面的代码不起作用,因为 "request" 未被识别)
在文档的 "Custom permissions" 部分找不到任何用途,但也许我只是瞎了眼。 (覆盖 BasePermission?如何?谁?在哪里?)
谢谢:)
视图集使用 action
来确定从 get_permissions
方法调用的 HTTP 动词和权限,因此您可以覆盖它:
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()
在同一个问题上花费了一些钱。这是 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 是一个列表。