博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
egg(47,48)--rbac之角色和权限关联,角色授权
阅读量:6805 次
发布时间:2019-06-26

本文共 5347 字,大约阅读时间需要 17 分钟。

新增角色

clipboard.png

角色授权

clipboard.png

查找出所有的权限

clipboard.png

勾选上想要增加的权限(角色新增权限)

view

表单包括

  1. role_id(黄色框): 当前角色的id
  2. access_node(红色框): 把勾选上的权限id,都放到一个数组里
view/admin/role/auth.html

一级access_node

二级access_node

                                    <%for(var j=0;j
  
   <%}%>

全部view

<%for(var i=0;i
<%}%>
<%for(var j=0;j
  
   <%}%>

clipboard.png

controller

controller/admin/role.js
  1. 删除当前角色下面的所有权限
  2. 把获取的权限和角色增加到数据库
async doAuth() {    /*    1、删除当前角色下面的所有权限    2、把获取的权限和角色增加到数据库    */    // console.log(this.ctx.request.body);    var role_id = this.ctx.request.body.role_id;    var access_node = this.ctx.request.body.access_node;    // console.log(access_node)    //1、删除当前角色下面的所有权限    await this.ctx.model.RoleAccess.deleteMany({      "role_id": role_id    });    //2、给role_access增加数据 把获取的权限和角色增加到数据库    if (access_node) {      for (var i = 0; i < access_node.length; i++) {        var roleAccessData = new this.ctx.model.RoleAccess({          role_id: role_id,          access_id: access_node[i]        })        roleAccessData.save();      }    }    await this.success('/admin/role/auth?id=' + role_id, "授权成功");  }
  1. role_id(黄色框): 角色id
  2. access_id(右边红色框): 表单勾选上的权限id,要给角色增加的权限
  3. access_id(左边多个红色框): 查找role_access表,得到的role_access关联的数据

clipboard.png

查看授权的时候,把角色拥有的权限默认勾选上(角色查看权限)

view

view/admin/role/auth.html

左边是第一级<%if(list[i].checked){%>

右边是第二级<%if(list[i].items[j].checked){%>

                                    <%for(var j=0;j
  
   <%}%>

clipboard.png

controller

  1. 获取全部的权限
  2. 查询当前角色拥有的权限(查询当前角色的权限id) 把查找到的数据放在数组中
  3. 循环遍历所有的权限数据 判断当前权限是否在角色权限的数组中, 如果在角色权限的数组中:选中 如果不在角色权限的数组中不选中
controller/admin/role.js
async auth() {    /*     1、获取全部的权限       2、查询当前角色拥有的权限(查询当前角色的权限id) 把查找到的数据放在数组中     3、循环遍历所有的权限数据     判断当前权限是否在角色权限的数组中,   如果在角色权限的数组中:选中    如果不在角色权限的数组中不选中    */    var role_id = this.ctx.request.query.id;    //1、获取全部的权限    var result = await this.ctx.model.Access.aggregate([      {        $lookup: {          from: 'access',          localField: '_id',          foreignField: 'module_id',          as: 'items'        }      },      {        $match: {          "module_id": '0'        }      }    ]);    //2、查询当前角色拥有的权限(查询当前角色的权限id) 把查找到的数据放在数组中    var accessReulst = await this.ctx.model.RoleAccess.find({      "role_id": role_id    });    console.log(accessReulst)    var roleAccessArray = [];    accessReulst.forEach(function (value) {      roleAccessArray.push(value.access_id.toString());    })    console.log(roleAccessArray)    // console.log(roleAccessArray);    // 3、循环遍历所有的权限数据     判断当前权限是否在角色权限的数组中    for (var i = 0; i < result.length; i++) {      if (roleAccessArray.indexOf(result[i]._id.toString()) != -1) {        result[i].checked = true;      }      for (var j = 0; j < result[i].items.length; j++) {        if (roleAccessArray.indexOf(result[i].items[j]._id.toString()) != -1) {          result[i].items[j].checked = true;        }      }    }    // console.log(result);    await this.ctx.render('admin/role/auth', {      list: result,      role_id: role_id    });  }
  1. 右边红色框为,当前角色(技术部门),所拥有的权限
  2. 左边红色框为,所有的权限列表

clipboard.png

转载地址:http://dynwl.baihongyu.com/

你可能感兴趣的文章
wamp安装及配置
查看>>
引用计数
查看>>
svn -- svn简介
查看>>
常存敬畏之心
查看>>
AgileEAS.NET平台开发Step By Step系列-药店系统-索引
查看>>
基于邻接表的新顶点的增加
查看>>
1118 Birds in Forest (25 分)
查看>>
追逐心目中的那个Ta
查看>>
【Spiral Matrix】cpp
查看>>
使用sphinx索引mysql数据
查看>>
视频连续播放
查看>>
C# 中的委托和事件(转)
查看>>
使用NSOperation和NSOperationQueue启动多线程
查看>>
关于在UITableViewController页面添加UINavigationBar的方法
查看>>
技术猿面试经
查看>>
C# 查看系统进程
查看>>
C#生成漂亮验证码完整代码类
查看>>
pollard_rho 算法进行质因数分解
查看>>
VS2008 连接TFS2012
查看>>
学习进度表(第六周)
查看>>