• home > OMD > PM >

    权限系统设计(6):鉴权库Casbin做权限控制

    Date:

    鉴权库我一般只关注两个Casbin、CASLhttps: npm-compare com @casl ability,@casl react,accesscontrol,casbin,caslCasbinCasbin 是一个

    鉴权库我一般只关注过这些:Casbin、CASL(全栈前端使用)、ladon(仅支持 ACL,而且 AWS IAM太烦躁

    https://npm-compare.com/@casl/ability,@casl/react,accesscontrol,casbin,casl

    casbin 多语言支持

    我更加推崇Casbin,开箱即用,通过 Model 文件来配置访问控制的逻辑判断,比如一个请求匹配到了多个策略,则可以设置为 allow-override 机制,也可以设置为 deny-override 机制。而 ladon 则是完全遵循 AWS 的风格:一否全否,除非改源代码,否则不能适应其他要求。


    Casbin

    Casbin 是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型(不能Authentication——做身份认证

    涉及到Go, Java, Node.js, Javascript (React), Python, PHP, .NET, Delphi, Rust等多种语言。

    官网:https://casbin.org/

    特性GoJavaNode.jsPHPPythonC#DelphiRustC++LuaDartElixir
    Enforcement
    RBAC
    ABAC
    Scaling ABAC (eval())
    Adapter
    Management API
    RBAC API
    Batch API
    Filtered Adapter
    Watcher
    Role Manager
    Multi-Threading
    'in' of matcher

    Casbin由北京大学罗杨博士创立于2017年,核心维护团队有数十人。Casbin在业界具有广泛影响力。目前已经被Intel、VMware、Orange、RedHat、T-Mobile等公司开源使用,被腾讯云、Cisco、Verizon等公司闭源使用。

    1. 前后端分离架构,Go语言开发,支持高并发,具有Web可视化管理界面,支持多语言(中文、英文)

    2. GitHub, Google, QQ, 微信等几十种OAuth 2.0第三方登录,支持阿里云IDaaS、KeyCloak等SAML第三方登录,支持以插件方式扩展新的第三方登录提供商,支持LDAP协议用户信息同步

    3. 基于Casbin的角色管理、组管理、权限管理,支持ACL、RBAC、ABAC、RESTful等访问控制模型

    4. 手机验证码、邮箱验证码、忘记密码

    5. 访问日志审计、记录

    6. 支持AWS S3、阿里云、腾讯云、七牛云等十几种图片、附件的CDN云存储

    7. 自定义注册、登录、忘记密码等页面

    8. 支持以db sync方式实现与现有账户系统的整合,可以平稳过度到Casdoor

    9. 支持主流数据库:MySQL, PostgreSQL, SQL Server等,支持以插件方式扩展新的数据库

    但是,这个项目其是对于小白用户,感觉还是非常友好……


    casbin前端使用

    https://casbin.org/docs/frontend/

    const casbinjs = require('casbin.js');
    
    // Set the user's permission:
    // He/She can read 2 objects: data1 and data2
    // Can write 1 objects: data1
    const permission = {
        "read": ['data1', 'data2'],
        "write": ['data1']
    }
    
    // Run casbin.js in manual mode, which requires you to set the permission manually.
    const authorizer = new casbinjs.Authorizer("manual");
    
    authorizer.setPermission(permission);
    
    authorizer.can("read", "data1").then(result => {
      console.log(result)
    })
    authorizer.cannot("write", "data2").then(result => {
      console.log(result)
    });

    通过读取,其是这些权限控制,就只需要一个中心,两个基本点:

    一个是规则模板,一个是数据

    规则模板就是你想用什么规则管理权限,ACL,RBAC 等;数据有各种 backend,例如文件,数据库等。

    casbin 能够帮你把代码实现上的复杂性,转换为 Casbin 配置上的复杂性



    具体使用方法,推荐:

    https://juejin.cn/post/7264920710786498572

    https://juejin.cn/post/7268813574251020307


    已经很详细了,所以就不多说了






    转载本站文章《权限系统设计(6):鉴权库Casbin做权限控制》,
    请注明出处:https://www.zhoulujun.cn/html/Operation/PM/2025_0221_9493.html