casbin 权限库
casbin 使用了 PERM 模型来表达权限, 并且提供了简单直接的 API.
核心概念
model file
用来定义具体的权限模型, 目前支持的模型基本覆盖了常见的所有场景:
- ACL
- ACL with superuser
- ACL without users
- ACL without resources
- RBAC
- RBAC with resource roles
- RBAC with domains/tenants
- ABAC
- RESTful
model file 定义语法
casbin 是基于 PERM 的, 所有 model file 中主要就是定义 PERM 4 个部分.
Request definition
1
2[request_definition]
r = sub, obj, act分别表示 request 中的
- accessing entity (Subject)
- accessed resource (Object)
- the access method (Action)
Policy definition
1
2
3[policy_definition]
p = sub, obj, act
p2 = sub, act定义的每一行称为 policy rule, p, p2 是 policy rule 的名字. p2 定义的是 sub 所有的资源都能执行 act
Policy effect
1
2[policy_effect]
e = some(where (p.eft == allow))上面表示有任意一条 policy rule 满足, 则最终结果为 allow
Matchers
1
2[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act定义了 request 和 policy 匹配的方式, p.eft 是 allow 还是 deny, 就是基于此来决定的
Role
1
2
3
4[role_definition]
g = _, _
g2 = _, _
g3 = _, _, _g, g2, g3 表示不同的 RBAC 体系, _, _ 表示用户和角色 _, _, _ 表示用户, 角色, 域(也就是租户)
policy file
定义具体的策略, 权限的检查就是基于定义的 model file 和 policy file 来完成的.
相对于 model file 定义规则, policy file 中定义的就是具体的内容.
RBAC 示例
定义 model file
1 | [request_definition] |
定义 policy file
1 | p, superAdmin, project, read |
测试代码
1 | package rbac |
多租户示例
定义 model file
1 | [request_definition] |
定义 policy file
1 | p, superAdmin, gy, project, read |
测试代码
1 | package tenants |
总结
casbin 权限管理库比较简单, 易上手, 但是它的功能却不简单, 支持了目前主流的所有权限管理场景. 在使用上, model file 和 poclicy file 的定义也简单明了, 抽象出了权限管理最本质的东西.
将具体业务中的权限要求映射到 casbin 中 model file, 就可以借助 casbin 的 API, 快速的实现权限管理.
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Blank!
评论