专栏首页Rust语言学习交流[Rust][权限控制][Casbin] Rust 下成熟好用的权限控制库

[Rust][权限控制][Casbin] Rust 下成熟好用的权限控制库

什么是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 以外六种语言:Node.js, PHP, Python, C#(.NET), C++, Java 最后希望各位看官走过路过,别忘了给一个 Star 支持一下我们的开发

本文分享自微信公众号 - Rust语言学习交流(rust-china),作者:hsluoyz

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-10-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【Rust日报】 2019-12-28 linux-io-uring,librpm.rs

    Casbin-RS是一个用于Rust项目的功能强大且高效的开源访问控制库。它为基于各种访问控制模型的授权执行提供支持。

    MikeLoveRust
  • 【Rust日报】 2019-05-30:使用最新的 async/await 的一些例子

    问题在于,(usize, &mut usize) 没有实现 Copy,所以在循环中一传就报 ERROR: use of moved value。 而 input...

    MikeLoveRust
  • 【Rust日报】 2019-07-29:关于创建「更小的」Rust的思考

    官方核心团队成员无船大佬新博文,针对社区中有些人喜欢Rust但还没有真正热爱Rust的人提出的看法「能否创造一个更小化更简单的更易于使用的Rust呢」所做的回应...

    MikeLoveRust
  • 基于Casbin的Docker权限管理访问控制插件

    Docker是目前主流的一种容器技术。为了解决多用户同时访问Docker时产生的安全问题,Docker设计了访问控制插件(Authorization Plugi...

    FB客服
  • 曝泰国最大的移动运营商泄露83亿条用户数据记录

    昨日,安全研究人员Justin Paine在一篇文章中表明自己发现了一个公开的ElasticSearch数据库,而该数据背后直指泰国一家移动网络运营商分部AIS...

    FB客服
  • 移动运营商AIS泄漏了83亿条用户数据 容量约4.7 TB

    数据猿报道 安全研究人员贾斯汀·潘恩(Justin Paine)在一篇文章中表明自己发现了一个公开的ElasticSearch数据库,而该数据背后直指泰国一家移...

    数据猿
  • CVPR 2018 | 中科大&微软提出立体神经风格迁移模型,可用于3D视频风格化

    选自arXiv 作者:Dongdong Chen等 机器之心编译 参与:Nurhachu Null、刘晓坤 近年来,在自然图像上再现名画风格的风格转换技术成为内...

    机器之心
  • MySQL数据库——数据库CRUD之基本DDL操作数据库及DML操作表

    SQL,Structured Query Language,结构化查询语言,其实就是定义了操作所有关系型数据库的规则。但是每种数据库厂商不一样,每一种数据库操作...

    Winter_world
  • Java8 Stream常用API整理(值得收藏)

    来 源:https://blog.csdn.net/wangchengming1/article/details/89245402

    一个程序员的成长
  • h5页面适配iPhone X的方法

    项目接近尾声,测试时突然想起还有iphoneX需要适配,虽然页面都是自适应,但是由于iPhone X的特殊性,还是需要特殊对待。因为这个h5项目嵌入在原生项目中...

    honey缘木鱼

扫码关注云+社区

领取腾讯云代金券