受 Google Zanzibar 启发的开源授权服务,用于在应用之外构建细粒度的 RBAC、ReBAC 与 ABAC 权限控制。
apache/casbin
Go 语言访问控制库,基于模型与策略文件实现 ACL、RBAC、ABAC 等授权控制。
- Star
- 20,482
- Fork
- 1,767
- 未关闭 Issue
- 39
- 最近提交
- 3天前
这是什么?
Apache Casbin 是一个面向 Go 项目的授权库,用于判断某个主体能否对某个对象执行某项操作。访问控制模型写在配置文件中,策略规则单独维护,因此切换或升级授权方案通常只需修改配置,而无需重写业务代码。
该库支持 ACL、RBAC(包括角色继承、资源角色以及按域或租户划分的角色)、基于资源属性的 ABAC、RESTful 路径与 HTTP 方法匹配、拒绝优先的规则以及规则优先级。策略既可以从文件加载,也可以通过适配器从数据库加载;运行时的管理 API 和专门的 RBAC API 允许应用在不重启的情况下修改权限。Casbin 只负责授权判断与策略存储,不处理用户管理、密码或身份认证。
项目隶属于 Apache 软件基金会。同一套模型在 Java、Node.js、PHP、Python、.NET、C++、Rust 等语言中也有对应实现,并提供在线编辑器用于编写模型和策略。
核心功能
- 01支持 ACL、RBAC、ABAC、RESTful、拒绝优先及优先级等多种访问控制模型。
- 02基于 PERM 元模型,在配置文件中定义访问控制模型。
- 03通过可插拔的适配器从数据库等来源加载和保存策略。
- 04提供管理 API 与 RBAC API,可在运行时修改权限。
- 05内置 keyMatch 等匹配函数,便于按路径模式匹配资源。
- 06提供同步型 Enforcer,便于在并发场景中使用。
适用场景
- 为 Go Web 服务或 API 增加基于角色的权限校验。
- 实现多租户场景下,同一用户在不同租户拥有不同角色的规则。
- 用属性规则表达权限,例如仅允许资源所有者编辑该资源。
- 通过管理后台在运行时动态更新权限策略。
快速上手
- 1
使用 Go 模块安装该库
go get github.com/casbin/casbin/v3 - 2
用模型文件和策略文件创建 enforcer
- 3
在每次访问前在代码中调用 Enforce 检查请求
使用前须知
- Enforcer 不是并发安全的,若在运行时会变化的共享 enforcer 需要使用同步版本。
- 该库不负责身份认证,也不管理用户和角色,这些需要由你的应用自行提供。
标签
常见问题
- casbin 是什么?
- Go 语言访问控制库,基于模型与策略文件实现 ACL、RBAC、ABAC 等授权控制。 Apache Casbin 是一个面向 Go 项目的授权库,用于判断某个主体能否对某个对象执行某项操作。访问控制模型写在配置文件中,策略规则单独维护,因此切换或升级授权方案通常只需修改配置,而无需重写业务代码。
- casbin 可以免费使用吗?用的什么许可证?
- casbin 以 Apache-2.0 许可证开源。用于商业产品前,请先确认许可证条款。
- casbin 还在维护吗?
- 活跃维护中。casbin 最近一次提交是在 2026年11月4日。
- casbin 适合用来做什么?
- 为 Go Web 服务或 API 增加基于角色的权限校验。 实现多租户场景下,同一用户在不同租户拥有不同角色的规则。 用属性规则表达权限,例如仅允许资源所有者编辑该资源。 通过管理后台在运行时动态更新权限策略。
- casbin 怎么安装和运行?
- 使用 Go 模块安装该库: go get github.com/casbin/casbin/v3 用模型文件和策略文件创建 enforcer 在每次访问前在代码中调用 Enforce 检查请求
- 在哪里获取 casbin?
- 源代码和安装说明在 GitHub 上:https://github.com/apache/casbin
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
为 Laravel 应用提供基于数据库的用户、角色与权限管理,并接入 Laravel 授权系统。
自托管的授权引擎(PDP),基于 YAML 策略判断谁可以对哪些资源执行何种操作。
通用策略引擎,用 Rego 语言编写授权与合规规则,供服务、Kubernetes 等系统调用决策。
面向 TypeScript 应用的数据层,提供兼容 Prisma 的 ORM、内置访问控制和自动生成的 CRUD 接口。
Supabase 官方 Python 客户端库合集,涵盖 Postgres 查询、认证、存储、实时订阅和边缘函数。