22title : RBAC
33---
44
5- 我们通过自定义依赖组件,实现了 RBAC 的轻松集成,在 Java 或其他语言中,常见的方式可能是注解,但在 FastAPI 中,依赖是它的亮点 ,也是核心
5+ 我们通过自定义依赖组件,实现了 RBAC 的轻松集成,在 Java 或其他语言中,常见的方式可能是注解,但在 FastAPI 中,Depends 是它的亮点 ,也是核心
66
77## RBAC
88
99fba 内置了两种解决方案,分别为【角色菜单】、【Casbin】
1010
11- ### 角色菜单
12-
1311::: tip
14- fba 中默认未启用此鉴权方式
12+ fba 中默认使用【Casbin】进行鉴权,管理员用户不受控,默认拥有所有访问权限
1513:::
1614
15+ ### 角色菜单
16+
1717此方案是各类语言 web 开发中比较常见的解决方案,它可以设置按钮级别的控制规则
1818
1919要想实现此 RBAC 鉴权,需要修改以下相关配置
@@ -24,25 +24,25 @@ fba 中默认未启用此鉴权方式
2424
2525 在 ` core/conf.py ` 文件中找到以下配置,并更新 ` RBAC_ROLE_MENU_MODE ` 为 ` True `
2626
27- ``` py
28- # Permission (RBAC)
29- RBAC_ROLE_MENU_MODE : bool = False
30- ```
27+ ``` py
28+ # Permission (RBAC)
29+ RBAC_ROLE_MENU_MODE : bool = False
30+ ```
3131
32322 . 添加接口依赖
3333
3434 只有在接口中添加以下依赖时,才能自动调用此鉴权方式
3535
36- ```py{5 - 6 }
37- @router.post (
38- ' ' ,
39- summary = ' xxx' ,
40- dependencies = [
41- Depends(RequestPermission(' sys:api:add' )), # 通常为 xxx:xxx:xxx
42- DependsRBAC,
43- ],
44- )
45- ```
36+ ``` py{5-6}
37+ @router.post(
38+ '',
39+ summary='xxx',
40+ dependencies=[
41+ Depends(RequestPermission('sys:api:add')), # 通常为 xxx:xxx:xxx
42+ DependsRBAC,
43+ ],
44+ )
45+ ```
4646
47473 . 在系统菜单中添加权限标识
4848
@@ -53,10 +53,6 @@ fba 中默认未启用此鉴权方式
5353
5454### Casbin
5555
56- ::: tip
57- fba 中默认使用此鉴权方式
58- :::
59-
6056此方案是 Go 语言中比较流行的解决方案,它非常灵活,可以通过模型定义多种控制规则
6157
6258要想使用此 RBAC 鉴权,需要学习以下几点
@@ -67,7 +63,7 @@ fba 中默认使用此鉴权方式
6763
6864 我们在最初架构设计时,参考了 go-admin,gin-vue-admin... 等优秀的开源项目,同时引入了 Casbin,它在众多 python web
6965 开源项目中可能是极为罕见的,并且,它的学习成本非常高,如果你对此感兴趣,可以通过 [ Casbin 官网] ( https://casbin.org/docs/get-started )
70- 进行学习,另外,可参考视频教程 [半小时彻底弄懂Casbin基础模型 ](https:// www.bilibili.com/ video/ BV1qz4y167XP/ ? spm_id_from = 333.999 .0.0& vd_source = 958c4d7f9243c68a0ec9dcd327bad930 )、[Casbin的代码使用、api调用 、自定义比较方法](https:// www.bilibili.com/ video/ BV13r4y1M7AC/ ? spm_id_from = 333.999 .0.0& vd_source = 958c4d7f9243c68a0ec9dcd327bad930 )
66+ 进行学习,另外,可参考视频教程 [ 半小时彻底弄懂 Casbin 基础模型 ] ( https://www.bilibili.com/video/BV1qz4y167XP/?spm_id_from=333.999.0.0&vd_source=958c4d7f9243c68a0ec9dcd327bad930 ) 、[ Casbin 的代码使用、api 调用 、自定义比较方法] ( https://www.bilibili.com/video/BV13r4y1M7AC/?spm_id_from=333.999.0.0&vd_source=958c4d7f9243c68a0ec9dcd327bad930 )
7167 ,讲的是非常好
7268
73692 . 了解规则
@@ -77,37 +73,38 @@ fba 中默认使用此鉴权方式
7773
7874 内置模型 ` backend/plugin/casbin/utils/rbac.py ` :
7975
80- ```text:no- line- numbers
81- [request_definition]
82- r = sub, obj, act
83-
84- [policy_definition]
85- p = sub, obj, act
86-
87- [role_definition]
88- g = _, _
89-
90- [policy_effect]
91- e = some(where (p.eft == allow))
92-
93- [matchers]
94- m = g(r.sub, p.sub) && (keyMatch(r.obj, p.obj) || keyMatch3(r.obj, p.obj)) && (r.act == p.act || p.act == " *" )
95- ```
76+ ``` text:no-line-numbers
77+ [request_definition]
78+ r = sub, obj, act
79+
80+ [policy_definition]
81+ p = sub, obj, act
82+
83+ [role_definition]
84+ g = _, _
85+
86+ [policy_effect]
87+ e = some(where (p.eft == allow))
88+
89+ [matchers]
90+ m = g(r.sub, p.sub) && (keyMatch(r.obj, p.obj) || keyMatch3(r.obj, p.obj)) && (r.act == p.act || p.act == "*")
91+ ```
9692
97933 . 了解策略
9894 ::: tabs
9995 @tab p 策略
100- - 添加基于角色的访问权限(推荐)
10196
102- 需要配合添加 g 策略才能实现用户访问权限,适合配置所有用户接口访问策略,拥有此角色的用户便能拥有相应的访问权限< br>
97+ - 添加基于角色的访问权限(推荐)
98+
99+ 需要配合添加 g 策略才能实现用户访问权限,适合配置所有用户接口访问策略,拥有此角色的用户便能拥有相应的访问权限<br >
103100
104- 格式:`角色 role + 访问路径 path + 访问方法 method`
101+ 格式:` 角色 role + 访问路径 path + 访问方法 method `
105102
106- - 添加基于用户的访问权限(不推荐)
103+ - 添加基于用户的访问权限(不推荐)
107104
108- 不需要配合添加 g 策略就能实现用户访问权限,适合配置指定用户接口访问策略< br>
105+ 不需要配合添加 g 策略就能实现用户访问权限,适合配置指定用户接口访问策略<br >
109106
110- 格式:`用户 uuid + 访问路径 path + 访问方法 method`
107+ 格式:` 用户 uuid + 访问路径 path + 访问方法 method `
111108
112109 @tab g 策略
113110 当 p 策略为【添加基于角色的访问权限】时,需要此策略
@@ -122,11 +119,11 @@ fba 中默认使用此鉴权方式
122119
123120 只有在接口中添加以下依赖时,才能自动调用此鉴权方式
124121
125- ```python{1 }
126- @router.post (' /hello' , summary = ' 你好' , dependencies = [DependsRBAC])
127- async def hello ():
128- ... .
129- ```
122+ ``` python{1}
123+ @router.post('/hello', summary='你好', dependencies=[DependsRBAC])
124+ async def hello():
125+ ....
126+ ```
130127
131128:::
132129
0 commit comments