概述
Casbin 是一个高效的开源访问控制库,负责执行授权(authorization),并支持多种访问控制模型。
实现基于规则的访问控制非常简单:在一个 policy 文件里定义主体、客体以及允许的操作,文件格式可以随意选择。这种模式在所有 Casbin 实现中都是一致的。 而 model 文件则让开发人员和管理员对授权逻辑拥有完全的控制权——包括结构、执行流程和条件判断。Enforcer 组件会根据你的 model 和 policy 来评估收到的请求。
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 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
扩展 ABAC(eval()) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Adapter | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| Management API | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| RBAC API | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Batch API | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ | |
| Filtered Adapter | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ |
| Watcher | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
| Role Manager | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ |
| 多线程(Multi-Threading) | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| matcher 中的 'in' | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
备注
Watcher 或 Role Manager 处的勾选标记(✅)仅表示核心库中定义了相应的接口,并不保证该语言有可用的具体实现。
Casbin 是什么?
Casbin 是一个面向需要受控访问资源的应用的授权库。通常,一个 subject(主体)(用户或服务)会请求对某个 object(客体)(资源或实体)执行某个 action(操作)(例如 读、写 或 删除)。你可以根据应用的需要自行定义这些操作。这就是 Casbin 最常处理的 { subject, object, action } 标准流程。
Casbin 还通过角色(RBAC)、属性(ABAC) 以及其他模式支持更复杂的场景。
Casbin 能做什么
- 执行 policy:支持经典的
{ subject, object, action }格式,也支持你自定义的任何格式,同时支持允许和拒绝两类规则。 - 管理存储:负责存储访问控制模型和策略。
- 处理用户—角色、角色—角色关系(RBAC 角色层级)。
- 支持内置超级用户(例如
root、administrator),无需显式规则即可拥有无限制访问权限。 - 提供内置运算符用于模式匹配(例如
keyMatch可以把/foo/bar匹配到/foo*)。
Casbin 不做什么
- 用户认证——例如在登录时校验用户名和密码。
- 用户或角色列表的管理——例如维护用户列表或角色列表。
大多数应用本身已经在管理用户、角色和凭据。Casbin 只专注于授权,不存储也不校验密码。在 RBAC 模式下,它会维护用户与角色之间的关联关系。






