12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- 'use strict';
- const assert = require('assert');
- const _ = require('lodash');
- const moment = require('moment');
- const { ObjectId } = require('mongoose').Types;
- const { CrudService } = require('naf-framework-mongoose/lib/service');
- const { BusinessError, ErrorCode } = require('naf-core').Error;
- class RoleService extends CrudService {
- constructor(ctx) {
- super(ctx, 'role');
- this.model = this.ctx.model.Role;
- this.Menumodel = this.ctx.model.Menu;
- }
- async update(data) {
- const { menu, id } = data;
- // 将有子目录的目录删除掉,保存
- let haveChild = await this.Menumodel.find({ _id: menu.map(i => ObjectId(i)) });
- haveChild = JSON.parse(JSON.stringify(haveChild));
- // 过滤出子目录是父级目录的目录项
- const nmenu = haveChild.filter(f => !haveChild.find(cf => cf.pid === f._id));
- data.menu = nmenu.map(i => i._id);
- const res = await this.model.update({ _id: id }, data);
- return res;
- }
- async getRoleMenuTree({ project, type, userid }) {
- assert(project, '缺少需要查找的项目信息');
- assert(type, '缺少需要查找角色代码');
- // 找到这个角色的所有权限
- const res = await this.model.findOne({ project, type });
- if (!res) throw new BusinessError(ErrorCode.DATA_NOT_EXIST, '未找到指定角色');
- let { menu } = res;
- // console.log(res);
- const object = {};
- // // 找到用户的角色对应的权限
- let roleMenu = await this.Menumodel.find({ project }).sort({ sort: -1 });
- if (roleMenu.length > 0) {
- // 将用户角色部分得到权限限制住,不允许改,必须有
- roleMenu = JSON.parse(JSON.stringify(roleMenu));
- roleMenu = roleMenu.map(i => {
- const { _id } = i;
- if (menu.includes(_id)) i.disabled = true;
- return i;
- });
- // 需要查看所有有子目录的目录,子目录disabled是否全为true,全为true,则他自己也是true,否则不用变
- // 整理成树状图格式
- roleMenu = await this.ctx.service.menu.toFindChildren(roleMenu);
- }
- object.menu = roleMenu;
- // 如果有userid,说明还需要找到这个用户的特有的权限,合并到selected中
- if (userid) {
- const umRes = await this.ctx.service.userMenu.findUserMenu({ project, userid });
- if (umRes) {
- const { menu: uMenu } = umRes;
- menu = [ ...menu, ...uMenu ];
- }
- }
- object.selected = menu;
- return object;
- }
- }
- module.exports = RoleService;
|