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 支持一下我们的开发
1
Hackerchai OP Casbin 是今年 Google Summer of Code 入选的开源社区中唯一的一个由国人发起的开源社区,同时也是历史上的第一个
|
2
del1214 2020-09-03 08:57:59 +08:00
支持 rust 项目
|
3
Hackerchai OP @del1214 谢谢老哥的支持
|
4
zjupigeon 2020-09-04 09:41:55 +08:00
@Hackerchai 同是梅西迷,同是 rust 迷,顶
|
5
guotie 2020-09-04 10:24:15 +08:00
Casbin 是个好东西
|
6
Hackerchai OP @zjupigeon 哈哈哈哈幸会幸会,希望 casbin-rs 可以以后在开发中帮到你! Força Barça!
|
7
Hackerchai OP @guotie 老哥现在有使用 casbin 么
|
8
veopax 2020-11-03 10:33:06 +08:00
支持 casbin~
|