如果想在 V2EX 获得更好的推广效果,欢迎了解 PRO 会员机制:
https://www.sunp.eu.org/pro/about

如果你经常使用铜币置顶主题,持有 V2EX Solana Token 会在每日签到时获得额外铜币:
https://www.sunp.eu.org/solana
doukeya
V2EX  ›  推广

访问控制框架之 Casbin.NET 简介

  •  
  •   doukeya · Jan 7, 2021 · 1766 views
    This topic created in 1963 days ago, the information mentioned may be changed or developed.

    访问控制框架之 Casbin.NET 简介

    官网:https://casbin.org/
    开源仓库源码:https://github.com/casbin
    QQ 群:546057381
    官方论坛:https://forum.casbin.com/

    Casbin.NET 是一个功能强大、效率高的.NET (C #)项目的开源访问控制库,是 Casbin 的其中一个语言分支。它支持基于各种访问控制模型实施授权。

    Casbin 支持的所有语言: 在这里插入图片描述支持的模型:

    1. ACL(访问控制列表)。
    2. ACL 和超级用户。
    3. 没有用户的 ACL:对于没有身份验证或用户登录的系统特别有用。
    4. 不含资源的 ACL:有些场景可能会通过使用诸如==write-article==、==read-log==等权限来针对某种类型的资源,而不是单个资源。它不控制对特定文章或日志的访问。
    5. RBAC(基于角色的访问控制)。
    6. 具有资源角色的 RBAC:用户和资源都可以同时具有角色(或组)。
    7. 带域 /租户的 RBAC:用户可以为不同的域 /租户拥有不同的角色集。
    8. ABAC(基于属性的访问控制):类似于 resource 的语法糖。Owner 可用于获取资源的属性。
    9. RESTful:支持 /res/*、/res/:id 等路径,支持 HTTP 方法 GET 、POST 、PUT 、DELETE 等。
    10. deny -override:同时支持 allow 和 deny 授权,deny 覆盖 allow 。
    11. 优先级:策略规则可以像防火墙规则一样进行优先级排序。

    原理:

    在 Casbin 中,一个访问控制模型基于 PERM 元模型(策略、效果、请求、Matchers)抽象到一个 CONF 文件中。因此,切换或升级项目的授权机制就像修改配置一样简单。您可以通过组合可用的模型来定制自己的访问控制模型。例如,您可以在一个模型中同时获得 RBAC 角色和 ABAC 属性,并共享一组策略规则。 Casbin 中最基本、最简单的模型是 ACL 。ACL 的模型 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
    

    ACL 模型的策略示例如下:

    p, alice, data1, read
    p, bob, data2, write
    

    这表示:

    • alic 可以读取 data1
    • bob 可以写 data2

    我们还通过在末尾添加''来支持多行模式:

    #Matchers
    [matchers]
    m = r.sub == p.sub && r.obj == p.obj \
      && r.act == p.act
    

    此外,如果你使用的是 ABAC,你可以在 Casbin golang 版(目前不支持 jCasbin 和 Node-Casbin)中尝试如下操作符:

    #Matchers
    [matchers]
    m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
    

    但是您应该确保数组的长度大于 1,否则会引起报警。 对于更多的操作符,您可以查看govaluate

    文档: https://casbin.org/docs/en/overview

    1 replies    2021-01-08 10:09:19 +08:00
    ychost
        1
    ychost  
       Jan 8, 2021
    好评,几年前用过 java 版本的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3104 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 13:54 · PVG 21:54 · LAX 06:54 · JFK 09:54
    ♥ Do have faith in what you're doing.