Casbin 学习指南 一、什么是 Casbin1.1 一句话介绍Casbin是一个强大的、高效的访问控制框架核心功能是判断「谁」能否对「某资源」做「某操作」。简单说它负责判断谁可以对什么东西做什么操作比如张三能不能查看订单李四能不能删除用户管理员能不能修改系统配置普通用户能不能下载报表如果系统需要判断这些问题就可以用 Casbin。一句话理解Casbin就是系统里的权限门卫。用户来了Casbin 会看一眼规则有权限放行没权限拦住1.2 Casbin 能做什么Casbin 的作用是帮后端系统管理权限。常见场景有后台管理系统用户权限系统企业内部系统SaaS 平台多租户系统API 接口权限控制菜单和按钮权限控制比如一个后台系统里有这些角色管理员运营财务普通用户不同角色能做的事情不一样管理员可以新增、删除、修改、查看用户运营可以查看和修改商品财务可以查看订单和账单普通用户只能查看自己的信息如果不用权限框架代码里可能会写很多判断if user.Role admin {return true}if user.Role finance action read resource bill {return true}项目小的时候还能忍项目一大这种代码就会越来越乱。Casbin 的作用就是把这些权限规则统一管理起来让代码更清楚。1.3 技术特点特点说明多语言支持Go、Java、C/C、Node.js、Python、PHP、.NET、Rust 等几乎所有主流语言模型与策略分离Model 定义规则结构Policy 定义具体权限数据分开管理更灵活高效判断内部做了大量优化权限判断性能极高开箱即用支持 ACL、RBAC、ABAC 等多种经典权限模型社区活跃GitHub 星标众多持续维护更新二、Casbin 核心概念2.1 三个核心概念Casbin 的设计围绕三个核心概念展开Model模型、Policy策略、Enforcer执行器。Model定义「谁能做什么」的规则模板相当于建筑设计图纸Policy具体的权限数据谁有哪些权限相当于实际的住户名单Enforcer执行权限判断的核心引擎相当于门禁系统的控制器2.2 Model模型—— 规则的骨架Model 用 CONF 配置文件来描述权限判断的逻辑结构。最常见的 Model 是 ACL访问控制列表格式如下request_definition定义请求格式比如 r sub, obj, act 代表谁(sub)、对什么(obj)、做什么(act)policy_definition定义权限格式和 request 对应matchers核心定义「请求」和「策略」如何匹配比如 r.sub p.sub 表示请求中的用户等于策略中的用户2.3 Policy策略—— 具体权限数据Policy 是具体的权限记录每一行代表一个权限规则。p sub, obj, act 对应的 Policy 文件CSV 格式示例第一行alice 能读 data1第二行bob 能写 data2第三行admin 对 data1 有所有权限* 代表通配符2.4 Enforcer执行器—— 核心引擎Enforcer 是 Casbin 的核心它加载 Model 和 Policy然后提供 Enforce() 方法让你做权限判断。类比Model 设计图Policy 材料Enforcer 建筑工人三、Casbin 的工作原理3.1 权限判断的完整流程用户发起请求alice 想读取 data1请求 alice, data1, read请求到达 EnforcerEnforcer 接收这个请求加载所有策略Enforcer 查看 Policy 文件中有哪些规则Matcher 匹配把请求代入 Matcher 公式逐一对比每条 Policy返回结果匹配成功返回 true允许匹配失败返回 false拒绝3.2 Matcher 公式详解Matcher 是 Casbin 最核心的逻辑下面详细拆解r.sub请求中的用户alicep.sub策略中的用户alice、bob、admin必须同时满足所有条件如果 r.sub p.sub r.obj p.obj r.act p.act 都成立 → 允许访问进阶Matcher示例支持通配符加了 || p.act * 之后p.act 为 * 的规则表示对所有操作都放行。进阶Matcher示例基于角色如果 Model 中定义了角色关系g还可以这样写这样 r.sub 可以是 alice但 p.sub 可以是 role:admin通过 g 找到 alice 的角色再判断权限。四、快速上手Hello World4.1 安装使用 Go 语言环境以 Go 为例go get github.com/casbin/casbin/v24.2 创建 Model 文件basic_model.conf4.3 创建 Policy 文件basic_policy.csv4.4 编写代码main.go五、Model 文件详解5.1 Model 的标准结构一个完整的 Model.conf 文件包含以下五个部分section[request_definition]定义权限验证请求的格式通常为谁、什么资源、什么操作[policy_definition]定义策略Policy的格式即权限记录的字段[policy_effect]定义多个策略匹配时的效果比如 allow 优先或 deny 优先[matchers]定义请求与策略如何匹配的逻辑表达式[role_definition]可选定义角色继承关系如 user - admin5.2 经典权限模型ACL 模型最简单适用场景用户直接绑定资源权限适合简单系统RBAC 模型基于角色最常用Policy 示例适用场景绝大多数后台管理系统用户 → 角色 → 权限六、Policy 文件详解6.1 CSV 格式说明Policy 文件是 CSV 格式每行一条策略记录逗号分隔各字段。格式p, 字段1, 字段2, 字段3, ... 字段的数量和顺序必须和Model配置中[policy_definition]里p sub, obj, act定义的完全一致6.2 RBAC Policy 示例Policy 文件rbac_policy.csv解释p 开头定义权限规则admin 能读写 /admin/userseditor 能读写 /articlesg 开头定义角色关系alice 属于 admin 角色bob 属于 editor 角色6.3 运行时修改 PolicyCasbin 支持在代码运行时动态添加/删除/修改策略无需重启应用AddPolicy()添加一条策略RemovePolicy()删除一条策略RemoveFilteredPolicy()删除符合条件的多条策略UpdatePolicy()更新一条策略SavePolicy()保存修改到策略七、资源推荐7.1官方资源Apache Casbin官网https://casbin.apache.org/Casbin原官网https://casbin.org/中文教程https://casbin.org/docs/tutorials/在线编辑器https://casbin.apache.org/docs/online-editor/7.2 常见问题QCasbin 和 Spring Security 有什么区别Casbin 是通用的权限框架不依赖具体语言和框架Spring Security 是 Java 技术栈的解决方案Casbin 可以集成进 Spring Security 一起用。QPolicy 存在哪里可以存 CSV 文件、数据库通过 Adapter生产环境推荐用数据库。QModel 和 Policy 有什么区别Model 是「规则模板」Policy 是「具体数据」Model 决定判断逻辑Policy 决定谁有什么权限。Q性能怎么样Casbin 做了大量优化本地判断在微秒级性能非常好放心在生产环境使用。