django - DRF Viewset 删除详细路线的权限
问题描述
我有一个基本的视图集:
class UsersViewSet(viewsets.ModelViewSet):
permission_classes = (OnlyStaff,)
queryset = User.objects.all()
serializer_class = UserSerializer
它绑定到/api/users/
端点。我想创建一个用户个人资料页面,所以我只需要一个特定的用户,所以我可以从中检索它/api/users/<id>/
,但问题是我想/api/users/<id>/
被允许任何人,但/api/users/
要保持它的权限OnlyStaff
,所以没有人可以访问完整的用户列表。
注意:也许这不是一个很好的实现,因为任何人都可以强制数据递增id
,但我愿意将其从 更改<id>
为<slug>
。
如何从详细路由中删除权限?
提前致谢。
解决方案
重写get_permissions()
方法如下
from rest_framework.permissions import AllowAny
class UsersViewSet(viewsets.ModelViewSet):
permission_classes = (OnlyStaff,)
queryset = User.objects.all()
serializer_class = UserSerializer
def get_permissions(self):
if self.action == 'retrieve':
return [AllowAny(), ]
return super(UsersViewSet, self).get_permissions()
推荐阅读
- perl - XS.c:可加载库和 perl 二进制文件不匹配(获得握手密钥 0xce00080,需要 0xdb80080)
- javascript - Ajax 请求中的 Django Forbidden(CSRF 令牌丢失或不正确。)
- amazon-web-services - AWS ECS + EFS + Spot 实例
- ruby - Ruby 通过调用方法创建哈希内容
- r - 'family' 参数不是带有偏移量的泊松回归的有效家庭对象?
- node.js - Json2csv 解析器解析时间过长
- c# - 无法隐式转换类型'System.Action
' 到 'mathtester.Program.OperationQuestionScore' - javascript - 按钮 onClick 函数(this)返回窗口对象
- node.js - 实时网站上的错误 400 错误请求,但不是我的生产版本
- python - Python 电子邮件选择性通知