python - Django DRF - 通过权限限制对列表视图的访问
问题描述
我有一个 DRF ViewSet,我正在向其中添加CanViewAndEditStaff
权限。我只希望某些用户 ( user.access_level < 2
) 能够查看员工列表。在我的 Permissions 类中,如何区分对list
视图的调用和对get
项目视图的调用。这是我的权限类:
class CanViewAndEditStaff(permissions.BasePermission):
def has_permission(self, request, view):
# IF THIS IS A LIST VIEW, CHECK ACCESS LEVEL
if ( request.user.access_level < 3 ):
return True
# ELSE, CONTINUE ON TO OBJECT PERMISSIONS
def has_object_permission(self,request,view,account):
# admin can do anything
if ( request.user.access_level == 1 ):
return True
# view/edit/delete
else:
# users can view their own account
if account == request.user:
return True
elif account.access_level >= request.user.access_level:
return True
return False
解决方案
class CanViewAndEditStaff(permissions.BasePermission):
def has_permission(self, request, view):
# IF THIS IS A LIST VIEW, CHECK ACCESS LEVEL
if (view.action == 'list' and request.user.access_level < 3 ):
return True
# ELSE, CONTINUE ON TO OBJECT PERMISSIONS
您可以使用 view.action 来了解这是列表还是其他内容。
推荐阅读
- elasticsearch - LogDNA 只存储最后一个月的日志
- react-native - React Native 样式表中的循环样式
- c# - 从实例化按钮识别按钮点击 - 在数组中隐藏游戏对象
- android - lastBaselineToBottomHeight 和 paddingBottom 的区别
- mongodb - Mongo聚合查询很慢
- excel - Excel VBA:无法获取工作表函数类的匹配属性运行时错误1004
- android - Flutter:Google Play 服务已过时
- javascript - 如何使用 HTTP 请求中的参数在 Django 中附加模型
- asp.net-mvc - 参数值中带有斜线的 MVC 路由
- python - 更新期间嵌套序列化程序的验证数据缺少默认值