欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解nodejs中express搭建权限管理系统

程序员文章站 2022-09-08 12:02:51
权限管理,是管理系统中的常见组件。通常需要定义资源,把资源调配给用户,通过判断用户是否有权限增删改查来实现。 初衷: 使用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

源码地址:https://github.com/wuwanyu/acldemo

运行前提:

安装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)

部分截图

详解nodejs中express搭建权限管理系统

详解nodejs中express搭建权限管理系统

详解nodejs中express搭建权限管理系统

详解nodejs中express搭建权限管理系统 

接口文档

资源相关:

1.保存资源树
2.获取资源列表

角色相关:

1.添加角色
2.修改角色
3.查询角色列表
4.删除角色
4.查询角色详情(含角色的权限列表)

用户相关:

1.用户登录
2.用户退出
3.添加用户
4.修改用户
5.删除用户
6.获取用户列表
7.查询用户详情(含用户权限列表)
8.给用户添加角色
9.获取用户角色

资源

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

/api/acl_resource/addarray
参数:
{
 list:json.stringify(nodelist)
}
返回值:
{
 code:"200",
 msg:"创建成功!"
}

2.获取资源列表

/api/acl_resource/getlist
参数:无
返回值:
{
 "code": "200",
 "msg": "获取详情成功",
 "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"
  },
  {
   "pid": "1",
   "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",
   "createdat": "2017-05-26t09:49:03.142z",
   "updatedat": "2017-05-27t07:17:41.963z",
   "id": "74a7970a-d53e-494b-9671-4b7b415c3469"
  },
  {
   "pid": "d2da6e56-f005-43cf-b109-af3a966fb059",
   "name": "经适房历史",
   "pinyin_name": "jingshifanglishi",
   "createdat": "2017-05-26t09:49:03.143z",
   "updatedat": "2017-05-27t07:17:41.964z",
   "id": "15862997-acef-43c1-a1c3-3af4b8e6588b"
  },
  {
   "pid": "1",
   "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"
  },
  {
   "pid": "78aa4788-f42f-42b6-9db1-e8ff0ad5b5df",
   "name": "对账单管理",
   "pinyin_name": "duizhangdanguanli",
   "createdat": "2017-05-26t09:51:48.412z",
   "updatedat": "2017-05-27t07:17:41.966z",
   "id": "5fe3e266-5a2a-47a4-b309-ee6f15db49ec"
  },
  {
   "pid": "1",
   "name": "系统管理",
   "pinyin_name": "xitongguanli",
   "createdat": "2017-05-26t09:51:48.413z",
   "updatedat": "2017-05-27t07:17:41.966z",
   "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"
  },
  {
   "pid": "fbe848c4-950e-402d-92c5-6fe067fd1bac",
   "name": "资源管理",
   "pinyin_name": "ziyuanguanli",
   "createdat": "2017-05-26t09:51:48.416z",
   "updatedat": "2017-05-27t07:17:41.969z",
   "id": "5de41a10-f31f-4eb2-91ba-25da102a25aa"
  },
  {
   "pid": "fbe848c4-950e-402d-92c5-6fe067fd1bac",
   "name": "角色管理",
   "pinyin_name": "jiaoseguanli",
   "createdat": "2017-05-26t09:51:48.416z",
   "updatedat": "2017-05-27t07:17:41.970z",
   "id": "9ffb5a8a-c304-403a-a724-f47cc73a9162"
  },
  {
   "pid": "1",
   "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.查询角色列表

/api/acl_role/getlist:获取角色列表
参数:无
返回值:
{
 "code": "200",
 "msg": "获取详情成功",
 "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.修改角色

/api/acl_role/update
参数:
{
 id:xxx,
 name:xxx,
}
返回值:
{
code:"200",
msg:"修改成功!",
result:data.update
}

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

/api/acl_role/getone
参数:
id:27aab6d9-325c-4c88-be4a-5da516dc9613
返回值:
{
 "code": "200",
 "msg": "获取详情成功",
 "result": {
  "info": {
   "name": "经适房用户",
   "createdat": "2017-05-26t09:49:22.361z",
   "updatedat": "2017-05-26t09:49:22.361z",
   "id": "27aab6d9-325c-4c88-be4a-5da516dc9613"
  },
  "resources": {
   "1": ["*"],
   "74a7970a-d53e-494b-9671-4b7b415c3469":["*"],
   "15862997-acef-43c1-a1c3-3af4b8e6588b": ["*"],
   "d2da6e56-f005-43cf-b109-af3a966fb059": ["*"],
   "d336dd69-80c7-492f-aee7-78a651b8305e":["*"]
  }
 }
}

4.删除角色

/api/acl_role/delete
① db删除角色
② acl删除该角色和资源的关系removeallow、删除角色removerole
参数:
{
 id:xxx,
}
返回值:
{
code:"200",
msg:"删除成功!",
result:result
}

5.给角色添加资源

/api/acl_role/allow
① 删除角色和资源的关系acl.removeallow
② 给角色和资源添加关系acl.allow
参数:
{
 role:xxx,
 resources:xxx
}
返回值:
{
code:"200",
msg:"成功!"
}

用户相关:

1.用户登录

/api/acl_user/login
参数:
{
 account:xxx,
 password:xxx
}
返回值:
{
code:200,
msg:"登录成功"
}
{
code:400,
msg:"密码错误"
}
{
code:400,
msg:"账号不存在"
}

2.用户退出

/api/acl_user/logout
参数:{}
返回值:
{
code:200,
msg:"退出成功!"
}

3.添加用户

/api/acl_user/add
参数:
{
 name:xxx,
 account:xxx,
 password:xxx
}
返回值:
{
code:"200",
msg:"创建成功!",
result:data.save
}

4.修改用户

/api/acl_user/update
参数:
{
 id:xxx,
 name:xxx,
 account:xxx,
 password:xxx
}
返回值:
{
code:"200",
msg:"修改成功!",
result:data.save
}

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

/api/acl_user/getone
① db获取用户信息
② acl获取用户权限allowedpermissions
参数:
{
 id:xxx,
 name:xxx,
 account:xxx,
 password:xxx
}
返回值:
{
code:"200",
msg:"修改成功!",
result:data.save
}

6.获取用户列表

/api/acl_user/getlist
参数:
{
 
}
返回值:
{
 "code": "200",
 "msg": "获取详情成功",
 "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
}

7.删除用户

/api/acl_user/delete
① db删除用户
② acl删除用户角色关系removeuserroles、删除用户removeuser

参数:
{
 id:xxx
}
返回值:
{
code:"200",
msg:"删除成功!",
result:result
}

8.获取用户权限

/api/acl_user/allowedpermissions
参数:
userid:xxx
resources:xxx
返回值:
{
code:"200",
msg:"成功!",
result:result
}

9.给用户添加角色

/api/acl_user/adduserroles
① 获取用户所有角色acl.userroles、删除用户所有角色acl.removeuserroles
② 添加新的角色acl.adduserroles
参数:
userid:xxx
roles:xxx
返回值:
{
code:"200",
msg:"成功!",
result:result
}

10.给用户添加角色

/api/acl_user/userroles
① 获取用户所有角色acl.userroles
参数:
userid:xxx
返回值:
{
code:"200",
msg:"成功!",
result:result
}

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

node_acl(1373星):https://github.com/optimalbits/node_acl
优点:支持express

connect roles(564星): https://github.com/forbeslindesay/connect-roles
点评:支持express,还需要引入passport.js

rbac(309星 ):https://github.com/cherryprojects/rbac
优点:支持express

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