express mysql 做rbac,详解nodejs中express搭建权限管理系统

搜索热词

权限管理,是管理系统中的常见组件。通常需要定义资源,把资源调配给用户,通过判断用户是否有权限增删改查来实现。

初衷:

使用express开发过的项目大大小小加在一起也有二十多个了,之前做的各个项目都是独立存在的。最近领导建议说把这些小项目整合到一个大的平台上,给各部门开权限,让他们在一个平台上进行操作。这样做的好处,首先是便于项目管理,其次是节约开发成本。但好像目前使用nodejs做权限管理的资料并不多,这里特意分享出来,仅供参考。

一开始在node_acl、Connect Roles、rbac这几个框架中徘徊,最终选择的node_acl框架,但node_acl只帮你做了权限管理的一部分工作,只保存用户、角色、资源三者 之间的关联关系,用户、角色、资源本身并没有保存。而我们要做的就是把用户、角色、资源的增删改查补齐,就是一个完整的权限管理系统了。

预期效果:

超级管理员登录后,可以进行所有操作,可以看到所有菜单栏;

普通用户登录后只有部分权限,只能看到部分菜单栏或操作按钮。

主要模块:

express:node框架

express-hbs:模板引擎

node_acl:权限管理系统的核心

mongodb:数据库

sails-mongodb:连接mongodb的引擎

前端:

Amaze ui、angular、Z-Tree

运行前提:

安装mongodb数据库

运行

1. 数据准备

(1) 将源代码目录下sql文件夹的内容,拷贝到mongodb安装目录的bin目录下

(2) 命令行方式进入mongodb安装目录的bin目录下,运行 mongorestore -d acltest acltest.dmp/acltest,将数据导入acltest表

2.安装依赖包:npm install

3. 运行:npm start

4.在浏览器输入: http://localhost:3000(用户名/密码:admin/admin 或 user/123)

部分截图

201709150921271.png

201709150921272.png

201709150921273.png

201709150921274.png

接口文档

资源相关:

1.保存资源树

2.获取资源列表

角色相关:

1.添加角色

2.修改角色

3.查询角色列表

4.删除角色

4.查询角色详情(含角色的权限列表)

用户相关:

资源

1.保存资源树(增加、修改、删除都是这个方法)

2.获取资源列表

获取详情成功","result": [

{

"pId": "0","name": "全部","pinyin_name": "quanbu","createdAt": "2017-05-26T09:49:03.139Z","updatedAt": "2017-05-27T07:17:41.959Z","id": "1"

},{

"pId": "1","name": "首页","pinyin_name": "shouye","createdAt": "2017-05-26T09:49:03.141Z","updatedAt": "2017-05-27T07:17:41.961Z","id": "41cd1dce-66c9-4aca-91c2-9135fba291c3"

},"name": "经适房","pinyin_name": "jingshifang","createdAt": "2017-05-26T09:49:03.142Z","updatedAt": "2017-05-27T07:17:41.962Z","id": "d2da6e56-f005-43cf-b109-af3a966fb059"

},{

"pId": "d2da6e56-f005-43cf-b109-af3a966fb059","name": "经适房首页","pinyin_name": "jingshifangshouye","updatedAt": "2017-05-27T07:17:41.963Z","id": "74a7970a-d53e-494b-9671-4b7b415c3469"

},"name": "经适房历史","pinyin_name": "jingshifanglishi","createdAt": "2017-05-26T09:49:03.143Z","updatedAt": "2017-05-27T07:17:41.964Z","id": "15862997-acef-43c1-a1c3-3af4b8e6588b"

},"name": "对账单","pinyin_name": "duizhangdan","createdAt": "2017-05-26T09:51:48.411Z","updatedAt": "2017-05-27T07:17:41.965Z","id": "78aa4788-f42f-42b6-9db1-e8ff0ad5b5df"

},{

"pId": "78aa4788-f42f-42b6-9db1-e8ff0ad5b5df","name": "对账单首页","pinyin_name": "duizhangdanshouye","createdAt": "2017-05-26T09:51:48.412Z","updatedAt": "2017-05-27T07:17:41.966Z","id": "c0f68fa4-81cd-4908-8005-97c88445d7b3"

},"name": "对账单管理","pinyin_name": "duizhangdanguanli","id": "5fe3e266-5a2a-47a4-b309-ee6f15db49ec"

},"name": "系统管理","pinyin_name": "xitongguanli","createdAt": "2017-05-26T09:51:48.413Z","id": "fbe848c4-950e-402d-92c5-6fe067fd1bac"

},{

"pId": "fbe848c4-950e-402d-92c5-6fe067fd1bac","name": "用户管理","pinyin_name": "yonghuguanli","createdAt": "2017-05-26T09:51:48.416Z","updatedAt": "2017-05-27T07:17:41.967Z","id": "1fd06306-6539-48e5-bf10-99ecd337e143"

},"name": "资源管理","pinyin_name": "ziyuanguanli","updatedAt": "2017-05-27T07:17:41.969Z","id": "5de41a10-f31f-4eb2-91ba-25da102a25aa"

},"name": "角色管理","pinyin_name": "jiaoseguanli","updatedAt": "2017-05-27T07:17:41.970Z","id": "9ffb5a8a-c304-403a-a724-f47cc73a9162"

},"name": "new node1","pinyin_name": "new node1","createdAt": "2017-05-27T07:17:41.971Z","updatedAt": "2017-05-27T07:17:41.971Z","id": "d336dd69-80c7-492f-aee7-78a651b8305e"

}

],"count": 13

}

角色

1.查询角色列表

获取角色列表

参数:无

返回值:

{

"code": "200","result": [

{

"name": "经适房用户","createdAt": "2017-05-26T09:49:22.361Z","updatedAt": "2017-05-26T09:49:22.361Z","id": "27aab6d9-325c-4c88-be4a-5da516dc9613"

},{

"name": "对账单用户","createdAt": "2017-05-26T09:52:15.061Z","updatedAt": "2017-05-26T09:52:15.061Z","id": "ba306957-9c80-4abb-89fd-17be828dd5f5"

},{

"name": "对账单管理员","createdAt": "2017-05-26T09:52:26.914Z","updatedAt": "2017-05-26T09:52:26.914Z","id": "fc154424-2264-4de9-9a7c-1b1df048f802"

},{

"name": "超级管理员","createdAt": "2017-05-26T09:52:39.894Z","updatedAt": "2017-05-26T09:52:39.894Z","id": "442cfc56-23a9-4cb9-85b5-641bc161c4c3"

}

],"count": 4

}

2.修改角色

修改成功!",result:data.update

}

3.查询角色详情(含角色的权限列表)

用户","resources": {

"1": ["*"],"74a7970a-d53e-494b-9671-4b7b415c3469":["*"],"15862997-acef-43c1-a1c3-3af4b8e6588b": ["*"],"d2da6e56-f005-43cf-b109-af3a966fb059": ["*"],"d336dd69-80c7-492f-aee7-78a651b8305e":["*"]

}

}

}

4.删除角色

删除角色

② acl删除该角色和资源的关系removeAllow、删除角色removeRole

参数:

{

id:xxx,msg:"删除成功!",result:result

}

5.给角色添加资源

删除角色和资源的关系acl.removeAllow

② 给角色和资源添加关系acl.allow

参数:

{

role:xxx,resources:xxx

}

返回值:

{

code:"200",msg:"成功!"

}

用户相关:

登录成功"

}

{

code:400,msg:"密码错误"

}

{

code:400,msg:"账号不存在"

}

logout

参数:{}

返回值:

{

code:200,msg:"退出成功!"

}

5.查询用户详情(含用户权限列表)

获取用户信息

② acl获取用户权限allowedPermissions

参数:

{

id:xxx,result:data.save

}

6.获取用户列表

}

返回值:

{

"code": "200","result": [

{

"name": "wuwanyu","createdAt": "2017-05-27T02:14:19.994Z","updatedAt": "2017-05-27T02:50:56.309Z","account": "120","password": "123","id": "7daa4635-9f9d-4c79-9f15-c827097ac15a"

}

],"count": 1

}

删除用户

② acl删除用户角色关系removeUserRoles、删除用户removeUser

参数:

{

id:xxx

}

返回值:

{

code:"200",result:result

}

8.获取用户权限

9.给用户添加角色

获取用户所有角色acl.userRoles、删除用户所有角色acl.removeUserRoles

② 添加新的角色acl.addUserRoles

参数:

userId:xxx

roles:xxx

返回值:

{

code:"200",result:result

}

10.给用户添加角色

获取用户所有角色acl.userRoles

参数:

userId:xxx

返回值:

{

code:"200",result:result

}

nodejs开源权限管理框架参考:

Connect Roles(564星): @L_301_2@

点评:支持express,还需要引入passport.js

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RBAC(基于角色的访问控制)是一种常见的权限管理模型,在该模型权限被分配给各个角色,而用户则被分配给一个或多个角色。在实现RBAC权限管理时,后端数据库(如MySQL)通常使用多表关联来处理各种实体之间的关系。 在MySQL,我们可以使用多个表来表示不同的实体,比如用户表、角色表和权限表。用户表用于存储用户信息,角色表用于存储不同角色的名称和描述,权限表用于存储各种权限的信息。 为了建立这些表之间的关联,我们可以使用外键约束来指定表与表之间的关系。例如,用户表可以包含一个角色ID列,该列作为外键指向角色表的主键。这样,每个用户就可以被分配给一个或多个角色。 另外,为了实现权限的细粒度管理,我们可能需要使用一个或多个关联表来表示角色与权限之间的关系。例如,我们可以创建一个用户角色关联表,该表存储每个用户所拥有的角色。同样,我们可以创建一个角色权限关联表,该表存储每个角色所拥有的权限。 通过使用多表关联,我们可以在后端数据库实现RBAC权限管理。首先,我们可以通过查询用户和角色表,确定特定用户的角色。然后,通过查询角色和权限表,确定特定角色的权限。最后,我们可以根据用户所拥有的权限来限制其对特定资源的访问。 总之,通过在后端数据库使用多表关联,我们可以有效地实现RBAC权限管理。这种方法可以帮助我们灵活地控制用户的权限,保护敏感信息并确保系统的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值