11# Casbin RBAC
22
3- 基于 Casbin 实现的 RBAC 访问控制
3+ 基于 Casbin 实现的 RBAC 访问控制插件,支持角色、用户、接口维度的策略管理
44
5- 我们在最初架构设计时,参考了 go-admin,gin-vue-admin... 等优秀的开源项目,同时引入了 Casbin,它在众多 python web
6- 开源项目中可能是极为罕见的,并且,它的学习成本非常高
5+ - 支持 P 策略和 G 策略管理
6+ - 支持在路由中通过 ` DependsRBAC ` 启用策略校验
7+ - 建议先系统学习 Casbin,再接入业务接口鉴权
78
8- 使用此插件前,请查看以下内容
9+ 使用此插件前,建议查看以下内容:
910
10- ## Casbin 基础学习
11+ - ** 官方文档** :[ Casbin 官网] ( https://casbin.org/docs/get-started )
12+ - ** 在线编辑器** :[ Casbin Online Editor] ( https://casbin.org/zh/docs/online-editor )
13+ - ** 视频教程** :
14+ - [ 半小时彻底弄懂 Casbin 基础模型] ( https://www.bilibili.com/video/BV1qz4y167XP )
15+ - [ Casbin 代码使用与 API 调用] ( https://www.bilibili.com/video/BV13r4y1M7AC )
1116
12- 建议通过以下资源系统学习 Casbin
17+ ## 插件类型
1318
14- - ** 官方文档** :[ Casbin官网] ( https://casbin.org/docs/get-started )
15- - ** 视频教程** :
16- - [ 半小时彻底弄懂Casbin基础模型] ( https://www.bilibili.com/video/BV1qz4y167XP )
17- - [ Casbin代码使用与API调用] ( https://www.bilibili.com/video/BV13r4y1M7AC )
19+ - 扩展级插件
20+ - 扩展目标:` admin `
21+
22+ ## 配置说明
23+
24+ 在 ` backend/core/conf.py ` 中更新以下内容:
1825
19- ## 全局配置
26+ ``` python
27+ # RBAC
28+ RBAC_ROLE_MENU_MODE : bool = False
29+ ```
2030
2131在 ` backend/core/conf.py ` 中添加以下内容:
2232
2838RBAC_CASBIN_EXCLUDE : set[tuple[str , str ]]
2939```
3040
31- ## 规则配置
41+ 插件目录下 ` plugin.toml ` 的 ` [settings] ` 中包含以下内容:
42+
43+ ``` toml
44+ [settings ]
45+ RBAC_CASBIN_EXCLUDE = [
46+ [' POST' , ' /api/v1/auth/logout' ],
47+ ]
48+ ```
49+
50+ ## 使用方式
51+
52+ 1 . 安装并启用插件后,重启后端服务
53+ 2 . 在后台维护 API 资源、Casbin 策略和用户角色关系
54+ 3 . 在需要鉴权的路由中添加 ` DependsRBAC ` 依赖
55+ 4 . 使用在线编辑器验证规则后,再将策略写入系统
3256
3357内置模型:
3458
@@ -49,26 +73,32 @@ e = some(where (p.eft == allow))
4973m = g(r.sub, p.sub) && (keyMatch(r.obj, p.obj) || keyMatch3(r.obj, p.obj)) && (r.act == p.act || p.act == "*")
5074```
5175
52- 建议使用 [ 在线编辑器] ( https://casbin.org/zh/docs/online-editor ) 验证规则
53-
54- ## 策略管理
55-
56- | 类型 | 适用场景 | 格式 | 依赖关系 |
57- | ---------------| --------| -------------------------------------| --------|
58- | ** P策略** (角色基准) | 批量用户配置 | ` 角色 role + 访问路径 path + 访问方法 method ` | 需配合G策略 |
59- | ** P策略** (用户基准) | 指定用户配置 | ` 用户 uuid + 访问路径 path + 访问方法 method ` | 独立生效 |
60- | ** G策略** | 角色分配 | ` 用户 uuid + 角色 role ` | 需P策略配合 |
76+ 策略类型:
6177
62- ## 接口集成
78+ | 类型 | 适用场景 | 格式 | 依赖关系 |
79+ | ----------------| --------| -------------------------------------| ----------|
80+ | ** P 策略** (角色基准) | 批量用户配置 | ` 角色 role + 访问路径 path + 访问方法 method ` | 需配合 G 策略 |
81+ | ** P 策略** (用户基准) | 指定用户配置 | ` 用户 uuid + 访问路径 path + 访问方法 method ` | 独立生效 |
82+ | ** G 策略** | 角色分配 | ` 用户 uuid + 角色 role ` | 需 P 策略配合 |
6383
64- 在路由声明中添加鉴权依赖 :
84+ 路由集成示例 :
6585
6686``` python
6787@router.post (
6888 ' /hello' ,
6989 summary = ' 示例接口' ,
70- dependencies = [DependsRBAC] # 关键鉴权标识
90+ dependencies = [DependsRBAC],
7191)
7292async def hello ():
7393 ...
7494```
95+
96+ ## 卸载说明
97+
98+ - 卸载插件后,移除业务路由中的 Casbin 鉴权依赖
99+ - 如前端菜单或后台页面已集成策略管理,请同步清理对应入口
100+
101+ ## 联系方式
102+
103+ - 作者:` wu-clan `
104+ - 反馈方式:提交 Issue 或 PR
0 commit comments