新闻:还在担心如何编写正确的 Apache Casbin 策略吗?Apache Casbin online editor 即将为你提供帮助!请访问:https://casbin.apache.org/editor/

Apache Casbin 是一个强大且高效的开源访问控制库,适用于 Golang 项目。它支持基于各种访问控制模型来执行授权。
write-article、read-log 等权限针对某一类资源而非单个资源。它不控制对特定文章或日志的访问。resource.Owner 之类的语法糖来获取资源的属性。/res/*、/res/:id 等路径以及 GET、POST、PUT、DELETE 等 HTTP 方法。在 Casbin 中,访问控制模型被抽象为基于 PERM 元模型(Policy、Effect、Request、Matchers) 的 CONF 文件。因此,切换或升级项目的授权机制就像修改配置一样简单。你可以通过组合现有模型来定制自己的访问控制模型。例如,你可以在同一个模型中同时使用 RBAC 角色和 ABAC 属性,并共享一组策略规则。
Casbin 中最基础、最简单的模型是 ACL。ACL 的模型 CONF 如下:
# Request definition
[request_definition]
r = sub, obj, act
# Policy definition
[policy_definition]
p = sub, obj, act
# Policy effect
[policy_effect]
e = some(where (p.eft == allow))
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
ACL 模型的示例策略如下:
p, alice, data1, read
p, bob, data2, write
这意味着:
我们还支持通过在末尾附加 '\' 来使用多行模式:
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act
此外,如果你使用的是 ABAC,可以在 Casbin golang 版(尚不支持 jCasbin 和 Node-Casbin)中尝试如下所示的 in 运算符:
# Matchers
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
但你必须确保数组的长度大于 1,否则会导致 panic。
如需更多运算符,可以查看 govaluate
Apache Casbin 可以做到:
{subject, object, action} 形式或你定义的自定义形式执行策略,同时支持允许和拒绝授权。root 或 administrator 这样的内置超级用户。超级用户无需显式权限即可执行任何操作。keyMatch 可以将资源键 /foo/bar 映射到模式 /foo*。Apache Casbin 不会做的事情:
username 和 password)go get github.com/casbin/casbin/v3
https://casbin.apache.org/docs/overview
你也可以在 Web 浏览器中使用在线编辑器(https://casbin.apache.org/editor/)来编写 Casbin 模型和策略。它提供 语法高亮 和 代码补全 等功能,就像编程语言的 IDE 一样。
https://casbin.apache.org/docs/tutorials
使用模型文件和策略文件新建一个 Casbin enforcer:
e, _ := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
注意:你也可以使用数据库中的策略而不是文件来初始化 enforcer,详情请参阅策略持久化一节。
在访问发生前将执行钩子添加到你的代码中:
sub := "alice" // the user that wants to access a resource.
obj := "data1" // the resource that is going to be accessed.
act := "read" // the operation that the user performs on the resource.
if res, _ := e.Enforce(sub, obj, act); res {
// permit alice to read data1
} else {
// deny the request, show an error
}
除了静态策略文件外,Apache Casbin 还提供了运行时权限管理 API。例如,你可以像下面这样获取分配给用户的所有角色:
roles, _ := e.GetImplicitRolesForUser(sub)
更多用法请参阅策略管理 API。
Apache Casbin 提供了两组 API 来管理权限:
我们还提供了一个基于 Web 的 UI,用于模型管理和策略管理:


https://casbin.apache.org/docs/adapters
https://casbin.apache.org/docs/watchers
https://casbin.apache.org/docs/role-managers
https://casbin.apache.org/docs/benchmark
用于 Web 框架的授权中间件:https://casbin.apache.org/docs/middlewares
https://casbin.apache.org/docs/adopters
请阅读贡献指南。
本项目采用 Apache 2.0 许可证 授权。
如果你有任何问题或功能请求,请联系我们。欢迎提交 PR。
![]() | ![]() | ![]() | ![]() |
|---|
| Casbin | jCasbin | node-Casbin | PHP-Casbin |
| 生产就绪 | 生产就绪 | 生产就绪 | 生产就绪 |
![]() | ![]() | ![]() | ![]() |
|---|
| PyCasbin | Casbin.NET | Casbin-CPP | Casbin-RS |
| 生产就绪 | 生产就绪 | 生产就绪 | 生产就绪 |
| 模型 | 模型文件 | 策略文件 |
|---|