百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>JS教程> 理解一下Node.js Casbin
分享文章到:

理解一下Node.js Casbin

发布时间:09/01 来源:未知 浏览: 关键词:

【视频教程引荐: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.act

ACL model的示例policy如下:

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

这表示:

  • alice可以读取data1
  • bob可以编写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。

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板