Overview
Casbin 是一个高效的开源访问控制库,用于执行授权,支持多种 访问控制模型。
实现基于规则的访问控制很简单:在 策略 文件中,以任何适合你的格式定义主体、对象和允许的操作。这种模式在所有 Casbin 实现中都是一致的。模型 文件让开发者和管理员完全掌控授权逻辑:结构、执行流程和条件。 Enforcer 组件根据模型和策略评估传入的请求。
Casbin支持的语言
Casbin 原生支持多种编程语言,可以集成到各种项目和工作流中:
![]() | ![]() | ![]() | ![]() |
|---|---|---|---|
| Casbin | jCasbin | node-Casbin | PHP-Casbin |
| 生产就绪 | 生产就绪 | 生产就绪 | 生产就绪 |
![]() | ![]() | ![]() | |
|---|---|---|---|
| PyCasbin | Casbin.NET | Casbin-CPP | Casbin-RS |
| 生产就绪 | 生产就绪 | 生产就绪 | 生产就绪 |
各语言的功能支持
我们的目标是让所有语言实现的功能保持一致,但目前还没有完全做到。
| 特性 | 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 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
备注
Watcher 或 Role Manager 打勾(✅)表示核心库中有对应接口,并不代表该语言一定有现成的实现。
什么是Casbin?
Casbin 是一个授权库,适用于需要控制资源访问的应用。通常,一个 主体(用户或服务)请求访问一个 对象(资源或实体),执行一个 操作(例如 读、写 或 删除)。这些操作由你根据应用自行定义。这就是 Casbin 最常处理的标准 { subject, object, action } 流程。
Casbin 还通过 角色(RBAC)、属性(ABAC) 等模式支持更复杂的场景。
Casbin做什么
- 执行策略:采用经典的
{ subject, object, action }格式或你自定义的任何格式,同时支持允许和拒绝。 - 管理存储:存储访问控制模型和策略。
- 处理用户与角色、角色与角色的关系(RBAC 角色层级)。
- 支持内置超级用户(例如
root、administrator),无需显式规则即可无限制访问。 - 提供内置运算符 做模式匹配(例如
keyMatch可以把/foo/bar与/foo*匹配)。
Casbin 不做什么
- 用户认证:登录时校验用户名和密码。
- 用户或角色列表管理:维护用户或角色的列表。
大多数应用已经自己管理用户、角色和凭据。 Casbin 只专注于授权,不存储也不校验密码。在 RBAC 模式下,它确实会维护用户与角色的关联。
下一步
- 用 Go、Node.js、Python 或 Java 搭建一个可运行的示例。
- 看看 Casbin 与 OpenFGA、OPA、CASL 和 Cedar 的对比。







Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.