跳转到主要内容

概述

Casbin 是一个高效的开源访问控制库,负责执行授权(authorization),并支持多种访问控制模型。

实现基于规则的访问控制非常简单:在一个 policy 文件里定义主体、客体以及允许的操作,文件格式可以随意选择。这种模式在所有 Casbin 实现中都是一致的。而 model 文件则让开发人员和管理员对授权逻辑拥有完全的控制权——包括结构、执行流程和条件判断。Enforcer 组件会根据你的 model 和 policy 来评估收到的请求。

Casbin 支持的语言​

Casbin 原生支持多种编程语言,你可以把它集成到各种项目和工具链中:

golangjavanodejsphp
CasbinjCasbinnode-CasbinPHP-Casbin
生产可用生产可用生产可用生产可用
pythondotnetc++rust
PyCasbinCasbin.NETCasbin-CPPCasbin-RS
生产可用生产可用生产可用生产可用

各语言的功能矩阵​

我们的目标是让所有语言实现的功能完全一致,但目前尚未完全达到。

功能GoJavaNode.jsPHPPythonC#DelphiRustC++LuaDartElixir
授权执行(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 能做什么​

  1. 执行 policy:支持经典的 { subject, object, action } 格式,也支持你自定义的任何格式,同时支持允许和拒绝两类规则。
  2. 管理存储:负责存储访问控制模型和策略。
  3. 处理用户—角色、角色—角色关系(RBAC 角色层级)。
  4. 支持内置超级用户(例如 root、administrator),无需显式规则即可拥有无限制访问权限。
  5. 提供内置运算符用于模式匹配(例如 keyMatch 可以把 /foo/bar 匹配到 /foo*)。

Casbin 不做什么​

  1. 用户认证——例如在登录时校验用户名和密码。
  2. 用户或角色列表的管理——例如维护用户列表或角色列表。

大多数应用本身已经在管理用户、角色和凭据。Casbin 只专注于授权,不存储也不校验密码。在 RBAC 模式下,它会维护用户与角色之间的关联关系。