Casbin是罗阳博士主导开发的基于 Go 语言的权限控制库。它支持 ACL, RBAC, ABAC 等常用的访问控制模型。
Casbin-rs则是 Rust 语言下的移植, 相比 Go 语言版本有更高的速度和内存安全保障。
// model.conf
# Request definition
[request_definition]
r = sub, obj, act
# Policy definition
[policy_definition]
p = sub, obj, act
# Policy effect
[policy_effect]
e = some(where (p.eft == allow))
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
这是一个模型定义文件, 其中sub
代表访问资源的用户, obj
表示要访问的资源, act
表示对资源执行的操作。如果在 Web 的情形中,可以理解为,sub 对应用户名,obj 对应访问的 URL Path,act 代表 HTTP 动作(GET/POST/PUT).
在这里,Request Definition 告诉我们请求是什么构成,一共三个。Policy Defination 有什么构成,和前面的同理。Policy Effect 告诉我们什么时候规则是有效的,而 Matcher 告诉我们当请求和策略满足一定关系才可以返回真(允许操作)。如上,意思就很明白。
如果我们要加入一个超级管理员,它可以执行任何操作,可以这样写:
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act || r.sub == "root"
p, alice, data1, read
p, bob, data2, write
上述的配合上文的模型配置表达的意思就是,alice 可以读 data1,bob 可以写 data2
主仓库:
Casbin-RS: 目前支持所有 Casbin Go 版本支持的特性,正在活跃开发中
目前 Casbin Rust 正稳步发展中,目前支持的组件有:
基于 Actix-web 开发,使用 Casbin 中间件鉴权, 使用 JWT 用户授权的例子:
此外 Casbin 拥有强大的文档支持和社区依托:
最后希望各位看官走过路过,别忘了给一个 Star 支持一下我们的开发
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.