先上链接casbin官网
casbin能做什么?
-
支持多种编程语言Go/Java/Node/PHP/Python/.NET/Rust,一次学习多处运用 -
支持自定义请求格式,默认格式(subject,object,action)
-
具有访问控制模型model和策略policy两个核心概念
-
支持RBAC中的多层继承,不仅subject有角色,object也可以有角色
-
支持内置的超级用户,例如root或admin,超级用户可以执行任何操作而无需显式的权限声明
-
支持多种内置的操作符,如 keyMatch,方便对路径式的资源进行管理,如 /foo/bar 可以映射到 /foo*
Casbin 不能做什么?
-
身份认证 authentication(即验证用户的用户名、密码),casbin只负责访问控制。应该有其他专门的组件负责身份认证,然后由casbin进行访问控制,二者是相互配合的关系。
-
管理用户列表或角色列表。 Casbin 认为由项目自身来管理用户、角色列表更为合适, 用户通常有他们的密码,但是 Casbin 的设计思想并不是把它作为一个存储密码的容器。 而是存储RBAC方案中用户和角色之间的映射关系
快速开始
Casbin可以使用配置文件来设置访问控制模式。
有2个配置文件:model.conf和policy.csv。其中,model.conf存储了访问模型,policy.csv存储了特定的用户权限配置。 Casbin的使用非常精炼。 基本上,我们只需要一个主要结构:enforcer。 当构建这个结构时,model.conf和policy.csv将被加载。
- 创建model模型文件model.conf
[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) && r.obj == p.obj && r.act == p.act
- 创建策略控制文件policy.csv
p, alice, data1, read
p, bob, data2, write
p, data2_admin, data2, read
p, data2_admin, data2, write
g, alice, data2_admin
可通过官网的编辑器直接运行查看结果,【直达链接】
crocodile项目中用到的Casbin参考:
模型Model
modeltext := `
[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) && regexMatch(r.act, p.act)
`
m, err := model.NewModelFromString(modeltext)
适配器Adapter
a, err := gormadapter.NewAdapter(dbcfg.Drivename, dbcfg.Dsn, true)
根据Model和Adapter实现结构-enforcer
enforcer, err = casbin.NewEnforcer(m, a)
目前只是Casbin的初始化,后面会继续记录具体的操作。 参考的链接: