Repolode
apache

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. 1

    使用 Go 模块安装该库

    go get github.com/casbin/casbin/v3
  2. 2

    用模型文件和策略文件创建 enforcer

  3. 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 数据每日更新。

相关项目