新增角色
角色授权
查找出所有的权限
勾选上想要增加的权限(角色新增权限)
view
表单包括
- role_id(黄色框): 当前角色的id
- access_node(红色框): 把勾选上的权限id,都放到一个数组里
view/admin/role/auth.html
一级access_node
<label>
<input type="checkbox" class="module_cbo" <%if(list[i].checked){%> checked
<%}%> value="<%=list[i]._id %>" name="access_node[]">
<%=list[i].module_name %> <%=list[i]._id %>
</label>
二级access_node
<td>
<%for(var j=0;j<list[i].items.length;j++){%>
<label>
<input type="checkbox" class="action_cbo" <%if(list[i].items[j].checked){%>
checked
<%}%> value="<%=list[i].items[j]._id%>" name="access_node[]">
<%=list[i].items[j].action_name%> <%=list[i].items[j]._id%></label>
<%}%>
</td>
全部view
<form action="/admin/role/doAuth" method="POST">
<input type="hidden" name="_csrf" value="<%=csrf%>" />
<input type="hidden" name="role_id" value="<%=role_id%>" />
<table class="table table-bordered">
<%for(var i=0;i<list.length;i++){%>
<tr>
<td align="right" style="background: #D8E2FA; padding-right: 10px; width: 150px;">
<label>
<input type="checkbox" class="module_cbo" <%if(list[i].checked){%> checked
<%}%> value="<%=list[i]._id %>" name="access_node[]">
<%=list[i].module_name %> <%=list[i]._id %>
</label>
</td>
<td>
<%for(var j=0;j<list[i].items.length;j++){%>
<label>
<input type="checkbox" class="action_cbo" <%if(list[i].items[j].checked){%>
checked
<%}%> value="<%=list[i].items[j]._id%>" name="access_node[]">
<%=list[i].items[j].action_name%> <%=list[i].items[j]._id%></label>
<%}%>
</td>
</tr>
<%}%>
</table>
<button type="submit" class="btn btn-primary">提交</button>
</form>
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){%>
<label>
<input type="checkbox" class="module_cbo" <%if(list[i].checked){%> checked
<%}%> value="<%=list[i]._id %>" name="access_node[]">
<%=list[i].module_name %> <%=list[i]._id %>
</label>
右边是第二级<%if(list[i].items[j].checked){%>
<td>
<%for(var j=0;j<list[i].items.length;j++){%>
<label>
<input type="checkbox" class="action_cbo" <%if(list[i].items[j].checked){%>
checked
<%}%> value="<%=list[i].items[j]._id%>" name="access_node[]">
<%=list[i].items[j].action_name%> <%=list[i].items[j]._id%></label>
<%}%>
</td>
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
});
}
- 右边红色框为,当前角色(技术部门),所拥有的权限
- 左边红色框为,所有的权限列表
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。