权限系统设计(6):鉴权库Casbin做权限控制
Date:
鉴权库我一般只关注过这些:Casbin、CASL(全栈前端使用)、ladon(仅支持 ACL,而且 AWS IAM太烦躁)
https://npm-compare.com/@casl/ability,@casl/react,accesscontrol,casbin,casl
我更加推崇Casbin,开箱即用,通过 Model 文件来配置访问控制的逻辑判断,比如一个请求匹配到了多个策略,则可以设置为 allow-override 机制,也可以设置为 deny-override 机制。而 ladon 则是完全遵循 AWS 的风格:一否全否,除非改源代码,否则不能适应其他要求。
Casbin
Casbin 是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型(不能Authentication——做身份认证)。
涉及到Go, Java, Node.js, Javascript (React), Python, PHP, .NET, Delphi, Rust等多种语言。
特性 | Go | Java | Node.js | PHP | Python | C# | Delphi | Rust | C++ | Lua | Dart | Elixir |
---|---|---|---|---|---|---|---|---|---|---|---|---|
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等公司闭源使用。
前后端分离架构,Go语言开发,支持高并发,具有Web可视化管理界面,支持多语言(中文、英文)
GitHub, Google, QQ, 微信等几十种OAuth 2.0第三方登录,支持阿里云IDaaS、KeyCloak等SAML第三方登录,支持以插件方式扩展新的第三方登录提供商,支持LDAP协议用户信息同步
基于Casbin的角色管理、组管理、权限管理,支持ACL、RBAC、ABAC、RESTful等访问控制模型
手机验证码、邮箱验证码、忘记密码
访问日志审计、记录
支持AWS S3、阿里云、腾讯云、七牛云等十几种图片、附件的CDN云存储
自定义注册、登录、忘记密码等页面
支持以db sync方式实现与现有账户系统的整合,可以平稳过度到Casdoor
支持主流数据库: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) });
通过读取,其是这些权限控制,就只需要一个中心,两个基本点:
一个是规则模板,一个是数据
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