跳转至主要内容

Overview

Casbin 是一个高效的开源访问控制库,用于执行授权,支持多种 访问控制模型。

实现基于规则的访问控制很简单:在 策略 文件中,以任何适合你的格式定义主体、对象和允许的操作。这种模式在所有 Casbin 实现中都是一致的。模型 文件让开发者和管理员完全掌控授权逻辑:结构、执行流程和条件。 Enforcer 组件根据模型和策略评估传入的请求。

Casbin支持的语言​

Casbin 原生支持多种编程语言,可以集成到各种项目和工作流中:

golangjavanodejsphp
CasbinjCasbinnode-CasbinPHP-Casbin
生产就绪生产就绪生产就绪生产就绪
pythondotnetc++rust
PyCasbinCasbin.NETCasbin-CPPCasbin-RS
生产就绪生产就绪生产就绪生产就绪

各语言的功能支持​

我们的目标是让所有语言实现的功能保持一致,但目前还没有完全做到。

特性GoJavaNode.jsPHPPythonC#DelphiRustC++LuaDartElixir
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做什么​

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

Casbin 不做什么​

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

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

下一步​

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