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 可以以后在开发中帮到你! Fora Bara! |
![]() | 7 Hackerchai OP @guotie 老哥现在有使用 casbin 么 |
![]() | 8 veopax 2020-11-03 10:33:06 +08:00 支持 casbin~ |