当前位置: 首页 > news >正文

【项目开发Trip第2站】casbin库与身份权限划分

casbin库与身份权限划分

一、 Casbin 是什么?

Casbin 是一个强大高效的 开源访问控制库,支持多种访问控制模型(如 ACL, RBAC, ABAC 等)。它不是一个完整的身份认证或用户管理框架,而是专门负责处理 授权 问题,即回答“谁可以对什么进行什么操作?”。

核心思想:将授权逻辑与业务代码分离。你可以通过一个配置文件(模型文件)来定义你的安全策略,从而轻松调整授权规则,而无需重写大量代码。


二、 核心基础:PERM 元模型

Casbin 的核心是一个名为 PERM 的元模型(Policy, Effect, Request, Matchers)。几乎所有访问控制模型都可以通过这个元模型来定义。

PERM 模型包含四个核心部分:

  1. 请求 (Request):

    • 定义了一个访问请求的标准参数。通常是一个元组(三元组或四元组)。
    • 标准形式是:sub, obj, act
      • sub: 访问的主体(例如:用户 alice,角色 admin
      • obj: 访问的资源(例如:数据 data1,页面 /api/user
      • act: 执行的操作(例如:readwritedelete
  2. 策略 (Policy):

    • 定义了具体的授权规则,也就是访问控制策略的实际内容。它和 Request 的形式是对应的。
    • 通常也以 sub, obj, act 的形式存储在策略文件中或数据库里。例如一条策略 p, alice, data1, read 表示 “alice 可以读取 data1”。
    • 你提到的 pg 就在这里定义(详见第四部分)。
  3. 匹配器 (Matchers):

    • 这是授权逻辑的核心。它是一个表达式,用于将 请求 (Request) 与已定义的 策略 (Policy) 进行匹配。
    • 例如:m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
    • 这个匹配器的意思是:如果请求的 sub, obj, act 分别与某条策略的 sub, obj, act 完全一致,则这条策略匹配成功。
  4. 效果 (Effect):

    • 当匹配器找到多条匹配的策略时,Effect 根据这些策略的结果(allowdeny)来决定最终的授权结果。
    • 最常见的 Effect 是:e = some(where (p.eft == allow))
      • 这意味着只要有一条匹配的策略结果是 allow,最终结果就是允许。
    • 你也可以定义更复杂的策略,如拒绝覆盖(deny-override):e = some(where (p.eft == allow)) && !some(where (p.eft == deny))
- 两个情况下的使用案例
1. 成功案例

在这里插入图片描述

场景描述

用户VIP等级为1,请求使用deepseek-v3.1模型

执行流程分析
  1. 请求生成

    • 程序创建授权请求:(1, "deepseek-v3.1", "use")
    • 对应格式:(sub=VIP等级, obj=模型名称, act=操作)
  2. 策略匹配

    • 在策略文件中查找匹配规则
    • 找到对应策略:p, 1, deepseek-v3.1, use
    • 三元组完全匹配:VIP等级、模型名称、操作类型一致
  3. 效果评估

    • 应用Effect规则:e = some(where (p.eft == allow))
    • 存在allow策略 → 授权通过
  4. 程序优化

    • 代码中使用了break语句,匹配成功后立即终止循环
    • 避免不必要的后续权限检查,提升性能
权限规则验证
VIP权限等级:
- VIP0 → doubao-seed-1.6-vision
- VIP1 → deepseek-v3.1 ✓ (当前用户)
- VIP2 → kimi-k2
2. 失败

在这里插入图片描述

场景描述

用户VIP等级为0,请求使用kimi-k2模型

执行流程分析
  1. 请求生成

    • 授权请求:(0, "kimi-k2", "use")
    • 用户VIP等级0尝试访问需要VIP2权限的模型
  2. 策略匹配过程

    • 检查策略1:p, 0, doubao-seed-1.6-vision, use → 模型不匹配
    • 检查策略2:p, 1, deepseek-v3.1, use → VIP等级不匹配
    • 检查策略3:p, 2, kimi-k2, use → VIP等级不匹配
  3. 授权决策

    • 无任何策略匹配成功
    • Effect规则要求至少存在一个allow策略
    • 最终结果:拒绝访问
权限规则验证
用户权限现状:
- 当前用户:VIP0
- 允许访问:doubao-seed-1.6-vision
- 尝试访问:kimi-k2 (需要VIP2)
- 权限差距:2个等级

三、 模型文件 (model.conf) 和策略文件 (policy.csv)

Casbin 的使用通常涉及两个配置文件:

  • 模型文件 (model.conf): 定义你的授权模型。它使用 PERM 元模型来声明 Request、Policy、Matcher 和 Effect。
  • 策略文件 (policy.csv)数据库: 存储具体的策略规则。这是可以动态加载和修改的部分。

示例:

model.conf

[request_definition]
r = sub, obj, act[policy_definition]
p = sub, obj, act[policy_effect]
e = some(where (p.eft == allow))[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act

policy.csv

p, alice, data1, read
p, bob, data2, write

代码中检查授权:

// 伪代码
if enforcer.Enforce("alice", "data1", "read") == true {// 允许访问
} else {// 拒绝访问
}
// 这个调用会返回 true,因为策略中存在 p, alice, data1, read

四、 策略中的 pg 是什么?

在模型文件的 [policy_definition] 部分,你可以定义两种类型的策略:

  1. p (策略定义):

    • 用于定义普通的权限规则。格式为 p, sub, obj, act
    • 它直接描述了“谁能对什么做什么”。
    • 示例p, admin, /api/user, GET 表示角色为 admin 的主体可以 GET /api/user 这个资源。
  2. g (角色定义):

    • 用于定义角色继承关系(RBAC 模型的核心)。格式为 g, sub, obj
    • 在标准 RBAC 中,它的含义是 g, user, role,表示“用户 user 具有角色 role”。
    • 它也支持角色继承,例如 g, role1, role2 表示“角色 role1 继承角色 role2 的所有权限”。

示例 (policy.csv):

p, admin, data, write
p, developer, data, read
g, alice, admin       # alice 拥有 admin 角色
g, bob, developer     # bob 拥有 developer 角色
g, charlie, admin     # charlie 也拥有 admin 角色
g, admin, developer   # admin 角色继承 developer 角色(所以admin也能read)

在这个例子中,alice 由于是 admin,而 admin 继承了 developer,所以 alice 同时拥有 data, writedata, read 的权限。


五、 几种经典模型和应用场景

Casbin 通过不同的模型文件可以实现多种授权模型。

模型描述应用场景模型文件关键点示例
ACL(访问控制列表)直接为用户分配资源权限。简单直接。简单的系统,用户量少,权限不复杂。如个人博客后台。m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
RBAC(基于角色的访问控制)权限分配给角色,用户被赋予角色。最常用。企业系统、SaaS 平台。用户和权限多,需要分层管理。如 CMS、ERP。必须包含 g 定义,matcher 中需使用 g(r.sub, p.sub) 来检查角色。
ABAC(基于属性的访问控制)根据主体、资源、环境的属性动态决策。非常灵活强大。复杂且动态的授权需求。如:办公时间才可访问;用户只能访问自己创建的文件;费用超过阈值需经理审批。在 Request 和 Matcher 中使用属性(如 r.sub, r.obj, r.act, r.env)。Matcher 类似函数:m = r.sub == r.obj.owner && r.env.hour >= 9 && r.env.hour <= 17
RestfulRBAC 的一种特化,通常将 URL 路径和 HTTP 方法作为资源和操作。现代 API 授权。如:GET /api/v1/users策略可能为 p, admin, /api/v1/users, GET,Matcher 可能支持路径匹配(如 KeyMatch)。

其中的Restful模型虽然是一种特殊化,听上去有点吓人,但是时间上就是将划分的内容改成了URL路径罢了,并没有高级到哪去


六、模型选择指南

根据项目规模选择
项目类型推荐模型选择理由
个人项目/原型ACL配置简单,快速上手
中小型企业应用RBAC角色管理清晰,维护性好
大型SaaS平台RBAC with 多租户支持客户隔离,权限复用
高安全要求系统ABAC动态属性检查,细粒度控制

总结

特性描述
核心价值将授权逻辑与业务代码解耦,提供统一的授权接口。
核心模型PERM 元模型(Request, Policy, Matcher, Effect)。
关键文件模型文件(model.conf)定义“如何判断”,策略文件(policy.csv/DB)定义“具体规则”。
关键策略p 定义权限,g 定义角色和继承关系(RBAC 核心)。
支持模型ACL, RBAC, ABAC, Restful 等,高度灵活可配置。
语言支持Go, Java, Node.js, Python, C++, .NET 等十几种语言。
http://www.dtcms.com/a/471714.html

相关文章:

  • POET 宣布投资7500万美元
  • wordpress底部插件郑州seo顾问热狗网
  • 韩国网站免费模板美丽定制 网站模板
  • 栾城网站制作产品推广策划案
  • 如何做网站联盟营销网站设计中的js
  • Wazuh vs. 安全洋葱:开源SOC核心平台用哪个呢?
  • 容桂网站制作价位晋江论坛手机版
  • 有做网站看病的吗用vs2010做网站应用程序脱机
  • 如何评价一个网站的网站建设林和西网站建设
  • 云服务器的应用场景
  • 网站开发需要什么工程师软装工作室
  • 怎么建立一个网站好文创产品设计方案模板
  • 提高网站排名怎么做小程序定制开发公司前十名
  • ins做甜品网站手车做网课网站
  • 【AI图片生成】图片生成,这里特别注意根据实际需要换成对应适合自己需求的图片大小和尺寸
  • 框架--Lombok
  • 要找人做公司网站应该怎么做开发工具控件属性怎么打开
  • Ubuntu 22.04 安装 AppImage
  • 电商网站开发流程图百度有刷排名软件
  • 昆明百度搜索排名优化如何做网站的优化
  • 业主验证超时问题解决方案
  • 新乡网站开发的公司电话亚马逊图书官网
  • 贵州省建设局八大员报名网站管理咨询行业
  • [GazeTracking] 摄像头交互与显示 | OpenCV
  • 车载互联系统网站建设佛山网站建设哪里有
  • 红酒营销 网站建设南京短视频制作公司
  • 同一域名可以做相同网站吗建设银行广安官方网站
  • 泽成seo网站排名只做二手奢侈品的网站
  • 监测网站空白栏目网页设计论文提纲
  • 怎么制作网站来赚钱投广告哪个平台好