likes
comments
collection
share

django-vue-admin 权限中间件

作者站长头像
站长
· 阅读数 14
settings.py 文件设置

中间件的引入一般放在settings.py 文件中的 MIDDLEWARE 中, 权限中间件也是从这里引入放进去。

django-vue-admin 权限中间件

自定义middleware文件解析

在上面截图中可以看到权限中间件是放在了vadmin.op_drf.middleware.PermissionModeMiddleware 里面 去到对应的 middleware 文件中,看中间件写的一些内容。

django-vue-admin 权限中间件 里面PermissionModelMiddleware类中继承了 MiddlewareMixin,然后自定义实现了中间件中常用的方法 process_request, process_view, process_response, 还有自己写了一个 has_interface_permission 方法去对权限进行判断.

process_request: 请求进来前的处理 process_view: 请求进入到视图处理前的处理 process_response: 请求处理完后的记录

这里主要是在process_view进行逻辑处理,可以对这进行分析解析。

  • process_view 解析

    1. 演示模式判断处理 环境变量DEMO_ENV 为真,请求的方法不是get或者options, 并且请求的地址不在白名单内的,一律拒绝。 django-vue-admin 权限中间件

    2. 如果没有开接口权限校验的,直接返回,无需校验

    django-vue-admin 权限中间件

    1. 如果开了接口权限校验,需要进行权限校验

      1. 获取请求用户的基本信息
      2. 用户存在且用户不是AnonymousUser类型的用户,则继续进行校验。
        1. 请求的是GET方法,一律不设置接口权限
        2. 解析请求URL
        3. 通过has_interface_permission方法获取接口认证权限auth_code

      django-vue-admin 权限中间件

    2. 解析 has_interface_permission

      接口权限验证,优先级: (1)接口是否接入权限管理, 是:继续; 否:通过 (2)认证的user是否superuser, 是:通过; 否:继续 (3)user的角色有该接口权限, 是:通过, 否:不通过

      1. 先获取所有录入系统的接口

      django-vue-admin 权限中间件 Menu.get_interface_dict() 相关代码

      django-vue-admin 权限中间件

      1. 判断此用户是否是superuser
      2. 获取此用户所请求的接口
      3. 获取此用户关联角色所有有权限的接口

      django-vue-admin 权限中间件