node_acl 路径通配

最近做一个基于nodejs的权限管理,查阅了一两天,发现大致是这样的:
passportjs
node-oauth
rbac
node_acl
express_acl
connect-roles

需求

按照模块,页面,API等级别做权限控制,暂时不需要做到按钮级别

主要程序开发完毕,需要侵入少

存储主要考虑redis

自己开发管理页面,方便自定义和维护

选取原则

轻量级别
passportjs太强大,大到怕怕

文档清晰(示例|API)
node_acl的readme 我只能说,真的是很友好,API也不多但是都非常get到点

好上手

容易扩展

功能强大或者适用

代码侵入少
最讨厌到处修改代码

人气指数相对比较高

最后选择了node_acl,主要是

人气相对比较高,大约2000star,

其次功能本身很独立,提供内存,mongo和redis三种存储方式

API简单好用

文档好读

源码不多,方便去自定义和扩展

我们主要程序开发完毕,需要侵入少,研究后发现node_acl应该可以

确认node_acl后,就开始研究一些小细节和设计,说这么多,就是自己写一点代码进行接口功能测试。

问题列表:

权限继承
addRoleParents满足需求,确实好用。比如guest, user ,admin三个Role, user集成guest, admin集成user。然后对不同的Role进行权限配置。还是不错的

Resource 不支持同配
这是什么意思,比如消息有下面几个路径, /msg/delete, msg/add, /msg/list,你就必须一条一条的配置,是不是很狗血
Added the possibility to have a wildcard in resource name

不提供所有的Role查询的API
我进入后,居然不知道有多少种Role

删除角色后,数据有残存

需要引入模块来关联页面或者API

初始化需要有超级管理员

默认设置,全部允许?全部不允许访问?

是否引入目录继承关系

。。。。。。

这里扒拉扒拉写这么多,很多只要API能做到,剩下的就是设计问题。麻烦的问题来了

Resource不支持通配

不提供所有的Role查询的API

这两个底层基本的功能不支持,还玩个蛋。
冷静,冷静,我们打开源码,会发现,插件一共就7个js(版本0.4.11)

acl.js
核心之核心文件,暴露Role,Resource, Permission等等的API

backend.js
backend API定义,并没实际作用

contract.js
参数验证js

memory-backend.js
内存中存储

mongodb-backend.js
mongodb存储

redis-backend.js
redis存储

index.js
默认文件

三种backend都是存储数据的,那我们先导出数据来看一看:
关于怎么导出redis

安装redis-dump

edis-dump -h 127.0.0.1 -d 0 --json > c:\db.json

我们看一看导出的文件

{ "acl_allows_/@guest": { "type": "set", "value": [ "*" ] }, "acl_allows_/about@guest": { "type": "set", "value": [ "*" ] }, "acl_allows_/index@guest": { "type": "set", "value": [ "*" ] }, "acl_meta@roles": { "type": "set", "value": [ "guest" ] }, "acl_meta@users": { "type": "set", "value": [ "1024" ] }, "acl_resources@guest": { "type": "set", "value": [ "http://www.likecs.com/", "/about", "/index" ] }, "acl_roles@user": { "type": "set", "value": [ "1024" ] }, "acl_users@1024": { "type": "set", "value": [ "user" ] } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydzsz.html