了解一下Node.js Casbin


本文摘自PHP中文网,作者青灯夜游,侵删。

【视频教程推荐: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

安装

1

# NPMnpm install casbin --save# Yarnyarn add casbin

开始吧

创建 Casbin enforcer 需要一个模型文件和策略文件作为参数:

1

import { newEnforcer } from 'casbin';const enforcer = await newEnforcer('basic_model.conf', 'basic_policy.csv');

您也可以用 DB 而不是文件中的策略来初始化 enforcer,详情请参阅 适配器。

1

2

3

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,例如,您可以获得如下分配给用户的所有角色:

1

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为:

1

2

3

4

5

# 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如下:

1

2

p, alice, data1, read

p, bob, data2, write

这表示:

  • alice可以读取data1
  • bob可以编写data2
    对于过长的单行配置,您也可以通过在结尾处添加’'进行断行:

1

2

# Matchers[matchers]m = r.sub == p.sub && r.obj == p.obj \

  && r.act == p.act

此外,对于 ABAC,您在可以在 Casbin golang 版本中尝试下面的 (jCasbin 和 Node-Casbin 尚不支持)操作:

1

# Matchers[matchers]m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')

但是你应确保数组的长度大于 1,否则的话将会导致 panic 。

对于更多操作,你可以查看 govaluate。

更多编程相关知识,可访问:编程入门!!

以上就是了解一下Node.js Casbin的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

nodejs模块的简单理解(附示例)

深入浅析node.js中的内置模块

使用node.js怎么压缩图片?方法介绍

如何使用llama logs显示和调试nodejs错误?

浅谈node.js中require()的工作原理

node.js进行调试的几种方法介绍

node.js真的单线程吗?进程间如何通信?

node.js真的单线程吗?进程间如何通信?

了解一下node.js中的文件夹写入

深入了解node.js的中worker threads(工作线程)

更多相关阅读请进入《node.js》频道 >>




打赏

取消

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

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

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

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...