我正在使用 Django REST 框架编写一个休息 API,我想用权限保护某些端点。权限类看起来提供了一种优雅的方式来实现这一点。我的问题是我想对不同的重写 ViewSet 方法使用不同的权限类。
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
def create(self, request, *args, **kwargs):
return super(UserViewSet, self).create(request, *args, **kwargs)
@decorators.permission_classes(permissions.IsAdminUser)
def list(self, request, *args, **kwargs):
return super(UserViewSet, self).list(request, *args, **kwargs)
在上面的代码中,我也想允许未经身份验证的用户注册(用户创建),但我不想让任何人列出用户,只是为了员工。
在 文档 中,我看到了使用 permission_classes
装饰器保护 API 视图(不是 ViewSet 方法)的示例,并且我看到了为整个 ViewSet 设置权限类。但它似乎不适用于重写的 ViewSet 方法。有没有办法只将它们用于某些端点?
原文由 fodma1 发布,翻译遵循 CC BY-SA 4.0 许可协议
我认为没有内置的解决方案。但是您可以通过覆盖
get_permissions
方法来实现: