我们在最初架构设计时,参考了 go-admin,gin-vue-admin... 等优秀的开源项目,同时引入了 Casbin,它在众多 python web 开源项目中可能是极为罕见的,并且,它的学习成本非常高
使用此插件前,请查看以下内容
建议通过以下资源系统学习 Casbin
- 官方文档:Casbin官网
- 视频教程:
在 core/conf.py 中添加以下内容:
# Plugin Casbin RBAC
# RBAC
RBAC_CASBIN_EXCLUDE: set[tuple[str, str]] = {
('POST', f'{settings.FASTAPI_API_V1_PATH}/auth/logout'),
('POST', f'{settings.FASTAPI_API_V1_PATH}/auth/token/new'),
}
内置模型:
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[role_definition]
g = _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = g(r.sub, p.sub) && (keyMatch(r.obj, p.obj) || keyMatch3(r.obj, p.obj)) && (r.act == p.act || p.act == "*")
建议使用 在线编辑器 验证规则
类型 | 适用场景 | 格式 | 依赖关系 |
---|---|---|---|
P策略(角色基准) | 批量用户配置 | 角色 role + 访问路径 path + 访问方法 method |
需配合G策略 |
P策略(用户基准) | 指定用户配置 | 用户 uuid + 访问路径 path + 访问方法 method |
独立生效 |
G策略 | 角色分配 | 用户 uuid + 角色 role |
需P策略配合 |
文件路径:api/v1/sys/casbin.py
在路由声明中添加鉴权依赖:
@router.post(
'/hello',
summary='示例接口',
dependencies=[DependsRBAC] # 关键鉴权标识
)
async def hello():
...