DRF APIView自定义权限类如何获取slug参数实现动态权限控制
实现方案
DRF 权限类的has_permission方法传入的view实例自带kwargs属性,存储了路由匹配后传入的所有路径参数,直接读取即可获取slug值。
完整的CustomPermission实现代码如下:
from rest_framework.permissions import BasePermission, IsAdminUser class CustomPermission(BasePermission): """ 根据请求方法和slug参数返回对应权限结果 """ def has_permission(self, request, view): # 非POST请求全部放行,对应AllowAny权限要求 if request.method != 'POST': return True # 从视图的kwargs属性获取URL传入的slug参数 slug = view.kwargs.get('slug', '') # POST请求权限逻辑判断 if slug == 'xyz': return True if slug == 'abc': # 复用DRF自带的管理员权限判断逻辑 return IsAdminUser().has_permission(request, view) # 其他slug场景可根据业务需求自定义返回逻辑,示例默认返回拒绝 return False
逻辑说明
- 非POST请求直接返回
True,符合除POST外所有请求走AllowAny权限的规则 - POST请求下slug为
xyz直接放行,slug为abc时调用DRF原生IsAdminUser的权限校验逻辑,无需自己重写管理员判断规则 - 若slug是通过查询参数传递而非路径参数,可改用
request.query_params.get('slug')获取对应值
内容的提问来源于stack exchange,提问作者Reactoo
相关产品推荐
相关产品推荐

