Hackerchai:
什么是Casbin-rs
Casbin是罗阳博士主导开发的基于 Go 语言的权限控制库。它支持 ACL, RBAC, ABAC 等常用的访问控制模型。
Casbin-rs则是 Rust 语言下的移植, 相比 Go 语言版本有更高的速度和内存安全保障。
Casbin 做了什么
- Casbin 的配置文件由两部分组成, 一个是 Configuration 文件(可以理解为模型配置文件), 配置了模型( Model )选用,分组( Group )配置,定义请求( Request )和策略( Policy )结构,再有就是匹配器( Matcher )的配置,这些在后文由叙述。另外一个就是策略( Policy )的盛放容器, 这个可以是 csv 文件,也可以是数据库( MySQL/PostgreSQl )。容器中的 Policies 都衍生于 Model 的配置
- 支持 RBAC 中的多层角色继承,不止主体可以有角色,资源也可以具有角色
- 支持超级用户,如 root 或 Administrator,超级用户可以不受授权策略的约束访问任意资源
- 支持多种内置的操作符,如 keyMatch,方便对路径式的资源进行管理,如 /book/1 可以映射到 /book/:id
Casbin 不做什么
- 身份认证 authentication(即验证用户的用户名、密码),casbin 只负责访问控制。应该有其他专门的组件负责身份认证,然后由 casbin 进行访问控制,二者是相互配合的关系。
- 管理用户列表或角色列表。Casbin 认为由项目自身来管理用户、角色列表更为合适,用户通常有他们的密码,但是 Casbin 的设计思想并不是把 它作为一个存储密码的容器。而是存储 RBAC 方案中用户和角色之间的映射关系。
一个例子
模型配置
// 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 Rust 生态
主仓库:
Casbin-RS: 目前支持所有 Casbin Go 版本支持的特性,正在活跃开发中
目前 Casbin Rust 正稳步发展中,目前支持的组件有:
- Casbin Diesel Adaper: 使用 Rust 目前最火的 ORM 类库开发的适配器,支持 MySQL/PostgreSQL/SQLite
- Casbin Actix-web Middleware: Rust 最由名气的 Web 框架当属 Actix-web,性能霸榜。Casbin 支持 Actix 中间件,自动为请求进行权限管理
- Casbin Actix-web Actor: Actix 框架下对 Casbin 进行二次封装,方便在 Actix-web 中使用,封装了常用函数
- Casbin Sqlx Adapter: 支持完全异步的数据库中间件,性能更好,基于 Sqlx 。支持 MySQL/PostgreSQL
基于 Actix-web 开发,使用 Casbin 中间件鉴权, 使用 JWT 用户授权的例子:
- Casbin Actix-web Real World App
此外 Casbin 拥有强大的文档支持和社区依托:
- Casbin 官网 Casbin 文档
- Casbin 论坛
- Casbin 同时支持除了 Go,Rust 以外六种语言:Mode.js, PHP, Python, C#(.NET), C++, Java
最后希望各位看官走过路过,别忘了给一个 Star 支持一下我们的开发
Hackerchai:Casbin 是今年 Google Summer of Code 入选的开源社区中唯一的一个由国人发起的开源社区,同时也是历史上的第一个
del1214:支持 rust 项目
Hackerchai:@del1214 谢谢老哥的支持
zjupigeon:@Hackerchai 同是梅西迷,同是 rust 迷,顶
guotie:Casbin 是个好东西
Hackerchai:@zjupigeon 哈哈哈哈幸会幸会,希望 casbin-rs 可以以后在开发中帮到你! Força Barça!
Hackerchai:@guotie 老哥现在有使用 casbin 么
备案期间域名能解析境外吗zok2002:备案期间域名能解析境外吗,境内不解析
《木兰》观后感Cyshall:除了服装和场景还可以,其余的是真的烂,太烂了,要不是因为刘亦菲真特么看不下去。Chell:觉得刘亦菲演技也一般(粉丝别打我)
骑电动车、共享电动车的哥们注意了!coolair:请务必出门前看下黄历!!!远远得观察交警是不是烈日炎炎还站在大马路上、十字路口、安全岛,如果是请务必多个心眼。否则,可能遇到以下糟心事:( 1 )共享电动车查头盔。这事我碰见多次了,不是通查,是逮谁谁倒霉,可能你边上骑自己电动车的都没戴,但就查你,然后绿灯了,其他没戴头盔的都走了,就把你给扣下了。( 2 )别以为带了头盔,有牌照,有行驶证就安…
成都的社保代缴有没有什么坑?有哪些注意事项?flyelephant:计划在成都买房,但是在深圳工作,想通过社保代缴来缴够社保。 通过链家中介联系了一家社保代缴的机构,准备去了解下。 第一次做,想向广大 v 友请教下里面有没有什么坑?wps353:直接网上找呗,我就是自己网上找的,帮一个亲戚代缴的。
浦东这边有什么好的公共篮球场吗?顺带寻球友。felixliu95277:来上海两个月了,没运动过,太热了,上次去小区附近的一个小区球场,说是疫情原因不开放。眼瞅着体重一直涨。 flowfire:东方体育中心?源深体育场? Morriaty:浦东太大了胖友