Skip to content

Commit d2da4c9

Browse files
committed
update docs
1 parent 7737f70 commit d2da4c9

File tree

1 file changed

+47
-50
lines changed

1 file changed

+47
-50
lines changed

docs/backend/reference/RBAC.md

Lines changed: 47 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@
22
title: RBAC
33
---
44

5-
我们通过自定义依赖组件,实现了 RBAC 的轻松集成,在 Java 或其他语言中,常见的方式可能是注解,但在 FastAPI 中,依赖是它的亮点,也是核心
5+
我们通过自定义依赖组件,实现了 RBAC 的轻松集成,在 Java 或其他语言中,常见的方式可能是注解,但在 FastAPI 中,Depends 是它的亮点,也是核心
66

77
## RBAC
88

99
fba 内置了两种解决方案,分别为【角色菜单】、【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

3232
2. 添加接口依赖
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

4747
3. 在系统菜单中添加权限标识
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

7369
2. 了解规则
@@ -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

9793
3. 了解策略
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

Comments
 (0)