You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:36:03