[Rust][权限控制][Casbin] Rust 下成熟好用的权限控制库 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Hackerchai
V2EX    分享创造

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

  •  1
     
  •   Hackerchai
    hackerchai 2020-09-01 16:41:07 +08:00 3948 次点击
    这是一个创建于 1867 天前的主题,其中的信息可能已经有所发展或是发生改变。

    什么是Casbin-rs

    Casbin是罗阳博士主导开发的基于 Go 语言的权限控制库。它支持 ACL, RBAC, ABAC 等常用的访问控制模型。

    Casbin-rs则是 Rust 语言下的移植, 相比 Go 语言版本有更高的速度和内存安全保障。

    Casbin 做了什么

    1. Casbin 的配置文件由两部分组成, 一个是 Configuration 文件(可以理解为模型配置文件), 配置了模型( Model )选用,分组( Group )配置,定义请求( Request )和策略( Policy )结构,再有就是匹配器( Matcher )的配置,这些在后文由叙述。另外一个就是策略( Policy )的盛放容器, 这个可以是 csv 文件,也可以是数据库( MySQL/PostgreSQl )。容器中的 Policies 都衍生于 Model 的配置
    2. 支持 RBAC 中的多层角色继承,不止主体可以有角色,资源也可以具有角色
    3. 支持超级用户,如 root 或 Administrator,超级用户可以不受授权策略的约束访问任意资源
    4. 支持多种内置的操作符,如 keyMatch,方便对路径式的资源进行管理,如 /book/1 可以映射到 /book/:id

    Casbin 不做什么

    1. 身份认证 authentication(即验证用户的用户名、密码),casbin 只负责访问控制。应该有其他专门的组件负责身份认证,然后由 casbin 进行访问控制,二者是相互配合的关系。
    2. 管理用户列表或角色列表。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 拥有强大的文档支持和社区依托:

    最后希望各位看官走过路过,别忘了给一个 Star 支持一下我们的开发

    8 条回复    2020-11-03 10:33:06 +08:00
    Hackerchai
        1
    Hackerchai  
    OP
       2020-09-01 16:43:36 +08:00
    Casbin 是今年 Google Summer of Code 入选的开源社区中唯一的一个由国人发起的开源社区,同时也是历史上的第一个
    del1214
        2
    del1214  
       2020-09-03 08:57:59 +08:00
    支持 rust 项目
    Hackerchai
        3
    Hackerchai  
    OP
       2020-09-03 11:29:31 +08:00 via Android
    @del1214 谢谢老哥的支持
    zjupigeon
        4
    zjupigeon  
       2020-09-04 09:41:55 +08:00
    @Hackerchai 同是梅西迷,同是 rust 迷,顶
    guotie
        5
    guotie  
       2020-09-04 10:24:15 +08:00
    Casbin 是个好东西
    Hackerchai
        6
    Hackerchai  
    OP
       2020-09-04 12:33:00 +08:00 via Android
    @zjupigeon 哈哈哈哈幸会幸会,希望 casbin-rs 可以以后在开发中帮到你! Fora Bara!
    Hackerchai
        7
    Hackerchai  
    OP
       2020-09-04 12:36:56 +08:00 via Android
    @guotie 老哥现在有使用 casbin 么
    veopax
        8
    veopax  
       2020-11-03 10:33:06 +08:00
    支持 casbin~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2812 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 00:21 PVG 08:21 LAX 17:21 JFK 20:21
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86