了解一下Node.js Casbin

发布时间:2025-12-06 点击:6
【视频教程推荐:nodejs视频教程 】
概述
casbin 是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。
casbin 是什么?
casbin 可以:
支持自定义请求的格式,默认的请求格式为{subject, object, action}。具有访问控制模型model和策略policy两个核心概念。支持rbac中的多层角色继承,不止主体可以有角色,资源也可以具有角色。支持超级用户,如 root 或 administrator,超级用户可以不受授权策略的约束访问任意资源。支持多种内置的操作符,如 keymatch,方便对路径式的资源进行管理,如 /foo/bar 可以映射到 /foo*
casbin 不能:
身份认证 authentication(即验证用户的用户名、密码),casbin只负责访问控制。应该有其他专门的组件负责身份认证,然后由casbin进行访问控制,二者是相互配合的关系。管理用户列表或角色列表。 casbin 认为由项目自身来管理用户、角色列表更为合适, 用户通常有他们的密码,但是 casbin 的设计思想并不是把它作为一个存储密码的容器。 而是存储rbac方案中用户和角色之间的映射关系。文档
casbin.org/docs/en/overview
安装
# npmnpm install casbin --save# yarnyarn add casbin开始吧
创建 casbin enforcer 需要一个模型文件和策略文件作为参数:
import { newenforcer } from 'casbin';const enforcer = await newenforcer('basic_model.conf', 'basic_policy.csv');您也可以用 db 而不是文件中的策略来初始化 enforcer,详情请参阅 适配器。
const sub = 'alice'; // 想要访问资源的用户。const obj = 'data1'; // 将要访问的资源。const act = 'read'; // 用户对资源执行的操作。const res = await enforcer.enforce(sub, obj, act);if (res) { // 允许 alice 读取数据1} else { // 拒绝请求,显示错误}除了静态策略文件外,node-casbin 还提供了用于在运行时进行权限管理的api,例如,您可以获得如下分配给用户的所有角色:
const roles = await enforcer.getrolesforuser('alice');请参阅 management api and rbac api 以获取更多使用方式。
工作原理
在 casbin 中, 访问控制模型被抽象为基于 perm (policy, effect, request, matcher) 的一个文件。 因此,切换或升级项目的授权机制与修改配置一样简单。 您可以通过组合可用的模型来定制您自己的访问控制模型。 例如,您可以在一个model中获得rbac角色和abac属性,并共享一组policy规则。
casbin中最基本、最简单的model是acl。acl中的model 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.actacl model的示例policy如下:
p, alice, data1, readp, bob, data2, write这表示:
alice可以读取data1bob可以编写data2
对于过长的单行配置,您也可以通过在结尾处添加’'进行断行:
# matchers[matchers]m = r.sub == p.sub && r.obj == p.obj \\\\ && r.act == p.act此外,对于 abac,您在可以在 casbin golang 版本中尝试下面的 (jcasbin 和 node-casbin 尚不支持)操作:
# matchers[matchers]m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')但是你应确保数组的长度大于 1,否则的话将会导致 panic 。
对于更多操作,你可以查看 govaluate。
更多编程相关知识,可访问:编程入门!!

购买云服务器服务
搭建一个mc云服务器需要多少钱
鲜花电商花点时间完成亿元融资 官网为英文域名reflower.com.cn
PHP基于mcript扩展实现对称加密功能
imo班聊全新官网域名“workchat”正式启用!
亳州市云服务器租赁
云服务器怎么连mysql
linux怎样修改hostname