这篇文章主要介绍Node.js Casbin是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
Casbin 是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。
Casbin 可以:
Casbin 不能:
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.act
ACL model的示例policy如下:
p, alice, data1, read p, bob, data2, write
这表示:
# 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。
以上是Node.js Casbin是什么的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。