新增角色
角色授权
查找出所有的权限
勾选上想要增加的权限(角色新增权限)
view
表单包括
- role_id(黄色框): 当前角色的id
- access_node(红色框): 把勾选上的权限id,都放到一个数组里
view/admin/role/auth.html
一级access_node
二级access_node
<%for(var j=0;j<%}%>
全部view
controller
controller/admin/role.js
- 删除当前角色下面的所有权限
- 把获取的权限和角色增加到数据库
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, "授权成功"); }
- role_id(黄色框): 角色id
- access_id(右边红色框): 表单勾选上的权限id,要给角色增加的权限
- access_id(左边多个红色框): 查找role_access表,得到的role_access关联的数据
查看授权的时候,把角色拥有的权限默认勾选上(角色查看权限)
view
view/admin/role/auth.html
左边是第一级<%if(list[i].checked){%>
右边是第二级<%if(list[i].items[j].checked){%>
<%for(var j=0;j<%}%>
controller
- 获取全部的权限
- 查询当前角色拥有的权限(查询当前角色的权限id) 把查找到的数据放在数组中
- 循环遍历所有的权限数据 判断当前权限是否在角色权限的数组中, 如果在角色权限的数组中:选中 如果不在角色权限的数组中不选中
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 }); }
- 右边红色框为,当前角色(技术部门),所拥有的权限
- 左边红色框为,所有的权限列表