Casbin 与 OpenFGA 对比
OpenFGA 和 Casbin 回答的都是“这个用户能否对那个对象做这件事?”但两者的构建方式截然不同。 OpenFGA 是一个仿照 Google Zanzibar 论文实现的服务器。 Casbin 是一个运行在你的应用内部的库。
总结
| Casbin | OpenFGA | |
|---|---|---|
| 形态 | 在你的进程内作为库运行 | 独立的服务器,通过 HTTP 或 gRPC 调用 |
| 核心思想 | PERM 模型:请求 、策略、效果、匹配器 | 关系元组和授权模型 |
| 访问控制方式 | ACL、RBAC、带域的 RBAC、ABAC、ReBAC 等 | ReBAC;角色和属性通过关系和条件表达 |
| 规则存储 | 通过适配器放在你自己的数据库中 | OpenFGA 的数据存储(PostgreSQL、MySQL 或 SQLite) |
| 一次检查的开销 | 一次函数调用 | 一次网络往返,加上服务器端的图解析 |
| 切换语言 | Go、Java、Node.js、Python、.NET、PHP、Rust、C++ 等语言的原生实现 | 多种语言的 SDK,调用服务器 |
| 列出用户能访问什么 | GetImplicitPermissionsForUser、BatchEnforce 等 API | ListObjects 和 ListUsers API |
| 治理 | Apache 软件基金会(孵化中) | 云原生计算基金会(CNCF) |
库与服务
使用 OpenFGA,你要运行和运维另一个服务:服务器、数据库、升级和监控。作为回报,公司里每个应用无论用什么语言编写,都能向同一个服务问同样的问题,关系数据也集中在一处。
使用 Casbin,不需要额外部署任何东西。加一个依赖,加载模型和策略,调用 Enforce() 即可。每次检查都在内存中运行,没有网络延迟,也不会引入新的故障点。如果以后需要一个中心化服务,可以自己把 Casbin 包装成 API,或使用 Casbin Server。