mirror of
https://github.com/cool-team-official/cool-admin-midway.git
synced 2026-01-06 02:48:13 +00:00
调试权限系统
This commit is contained in:
parent
a5fc2bf0c2
commit
47515547b2
@ -6,7 +6,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@midwayjs/decorator": "^2.7.5",
|
"@midwayjs/decorator": "^2.7.5",
|
||||||
"@midwayjs/orm": "^1.3.0",
|
"@midwayjs/orm": "^1.3.0",
|
||||||
"@midwayjs/web": "^2.3.0",
|
"@midwayjs/web": "^2.7.7",
|
||||||
"egg": "^2.29.3",
|
"egg": "^2.29.3",
|
||||||
"egg-scripts": "^2.13.0",
|
"egg-scripts": "^2.13.0",
|
||||||
"egg-view-nunjucks": "^2.3.0",
|
"egg-view-nunjucks": "^2.3.0",
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { Provide } from '@midwayjs/decorator';
|
import { Inject, Provide } from '@midwayjs/decorator';
|
||||||
import * as ipdb from 'ipip-ipdb';
|
import * as ipdb from 'ipip-ipdb';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import { Context } from 'egg';
|
import { Context } from 'egg';
|
||||||
@ -7,25 +7,29 @@ import { Context } from 'egg';
|
|||||||
* 帮助类
|
* 帮助类
|
||||||
*/
|
*/
|
||||||
@Provide()
|
@Provide()
|
||||||
export class Helper {
|
export class Utils {
|
||||||
|
|
||||||
|
@Inject()
|
||||||
|
baseDir;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得请求IP
|
* 获得请求IP
|
||||||
*/
|
*/
|
||||||
public async getReqIP(ctx: Context) {
|
async getReqIP(ctx: Context) {
|
||||||
const req = ctx.req;
|
const req = ctx.req;
|
||||||
return req.headers['x-forwarded-for'] || req.socket.remoteAddress
|
return req.headers['x-forwarded-for'] || req.socket.remoteAddress.replace('::ffff:', '');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据IP获得请求地址
|
* 根据IP获得请求地址
|
||||||
* @param ip 为空时则为当前请求的IP地址
|
* @param ip 为空时则为当前请求的IP地址
|
||||||
*/
|
*/
|
||||||
public async getIpAddr(ctx: Context, ip?: string | string[]) {
|
async getIpAddr(ctx: Context, ip?: string | string[]) {
|
||||||
try {
|
try {
|
||||||
if (!ip) {
|
if (!ip) {
|
||||||
ip = await this.getReqIP(ctx);
|
ip = await this.getReqIP(ctx);
|
||||||
}
|
}
|
||||||
const bst = new ipdb.BaseStation('./ipipfree.ipdb');
|
const bst = new ipdb.BaseStation(`${this.baseDir}/app/comm/ipipfree.ipdb`);
|
||||||
const result = bst.findInfo(ip, 'CN');
|
const result = bst.findInfo(ip, 'CN');
|
||||||
const addArr: any = [];
|
const addArr: any = [];
|
||||||
if (result) {
|
if (result) {
|
||||||
@ -36,6 +40,7 @@ import { Context } from 'egg';
|
|||||||
}
|
}
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
console.log(err)
|
||||||
return '无法获取地址信息';
|
return '无法获取地址信息';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -44,7 +49,7 @@ import { Context } from 'egg';
|
|||||||
* 去除对象的空值属性
|
* 去除对象的空值属性
|
||||||
* @param obj
|
* @param obj
|
||||||
*/
|
*/
|
||||||
public async removeEmptyP(obj) {
|
async removeEmptyP(obj) {
|
||||||
Object.keys(obj).forEach(key => {
|
Object.keys(obj).forEach(key => {
|
||||||
if (obj[key] === null || obj[key] === '' || obj[key] === 'undefined') {
|
if (obj[key] === null || obj[key] === '' || obj[key] === 'undefined') {
|
||||||
delete obj[key];
|
delete obj[key];
|
||||||
@ -56,7 +61,7 @@ import { Context } from 'egg';
|
|||||||
* 线程阻塞毫秒数
|
* 线程阻塞毫秒数
|
||||||
* @param ms
|
* @param ms
|
||||||
*/
|
*/
|
||||||
public sleep(ms) {
|
sleep(ms) {
|
||||||
return new Promise(resolve => setTimeout(resolve, ms));
|
return new Promise(resolve => setTimeout(resolve, ms));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,6 +1,7 @@
|
|||||||
import { Provide, Inject, Get } from '@midwayjs/decorator';
|
import { Provide, Inject, Get, Post, Body, ALL } from '@midwayjs/decorator';
|
||||||
import { Context } from 'egg';
|
import { Context } from 'egg';
|
||||||
import { CoolController, BaseController } from 'midwayjs-cool-core';
|
import { CoolController, BaseController } from 'midwayjs-cool-core';
|
||||||
|
import { BaseSysUserEntity } from '../../entity/sys/user';
|
||||||
import { BaseSysPermsService } from '../../service/sys/perms';
|
import { BaseSysPermsService } from '../../service/sys/perms';
|
||||||
import { BaseSysUserService } from '../../service/sys/user';
|
import { BaseSysUserService } from '../../service/sys/user';
|
||||||
|
|
||||||
@ -28,6 +29,15 @@ export class BaseCommController extends BaseController {
|
|||||||
return this.ok(await this.baseSysUserService.person());
|
return this.ok(await this.baseSysUserService.person());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改个人信息
|
||||||
|
*/
|
||||||
|
@Post('/personUpdate')
|
||||||
|
public async personUpdate(@Body(ALL) user: BaseSysUserEntity) {
|
||||||
|
await this.baseSysUserService.personUpdate(user);
|
||||||
|
return this.ok();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 权限菜单
|
* 权限菜单
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -1,7 +1,9 @@
|
|||||||
import { Provide, Body, ALL, Inject, Post, Get, Query } from '@midwayjs/decorator';
|
import { Provide, Body, ALL, Inject, Post, Get, Query } from '@midwayjs/decorator';
|
||||||
|
import { Context } from 'egg';
|
||||||
import { CoolController, BaseController } from 'midwayjs-cool-core';
|
import { CoolController, BaseController } from 'midwayjs-cool-core';
|
||||||
import { LoginDTO } from '../../dto/login';
|
import { LoginDTO } from '../../dto/login';
|
||||||
import { BaseSysLoginService } from '../../service/sys/login';
|
import { BaseSysLoginService } from '../../service/sys/login';
|
||||||
|
import { BaseSysParamService } from '../../service/sys/param';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 不需要登录的后台接口
|
* 不需要登录的后台接口
|
||||||
@ -13,6 +15,20 @@ export class BaseSysOpenController extends BaseController {
|
|||||||
@Inject()
|
@Inject()
|
||||||
baseSysLoginService: BaseSysLoginService;
|
baseSysLoginService: BaseSysLoginService;
|
||||||
|
|
||||||
|
@Inject()
|
||||||
|
baseSysParamService: BaseSysParamService;
|
||||||
|
|
||||||
|
@Inject()
|
||||||
|
ctx: Context;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据配置参数key获得网页内容(富文本)
|
||||||
|
*/
|
||||||
|
@Get('/html')
|
||||||
|
async htmlByKey(@Query() key: string) {
|
||||||
|
this.ctx.body = await this.baseSysParamService.htmlByKey(key);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 登录
|
* 登录
|
||||||
* @param login
|
* @param login
|
||||||
|
|||||||
@ -1,7 +1,8 @@
|
|||||||
import { Provide, Post, Inject } from '@midwayjs/decorator';
|
import { Provide, Post, Inject, Body, Get } from '@midwayjs/decorator';
|
||||||
import { CoolController, BaseController } from 'midwayjs-cool-core';
|
import { CoolController, BaseController } from 'midwayjs-cool-core';
|
||||||
import { BaseSysLogEntity } from '../../../entity/sys/log';
|
import { BaseSysLogEntity } from '../../../entity/sys/log';
|
||||||
import { BaseSysUserEntity } from '../../../entity/sys/user';
|
import { BaseSysUserEntity } from '../../../entity/sys/user';
|
||||||
|
import { BaseSysConfService } from '../../../service/sys/conf';
|
||||||
import { BaseSysLogService } from '../../../service/sys/log';
|
import { BaseSysLogService } from '../../../service/sys/log';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -24,15 +25,36 @@ import { BaseSysLogService } from '../../../service/sys/log';
|
|||||||
export class BaseSysLogController extends BaseController {
|
export class BaseSysLogController extends BaseController {
|
||||||
|
|
||||||
@Inject()
|
@Inject()
|
||||||
adminSysLogService: BaseSysLogService;
|
baseSysLogService: BaseSysLogService;
|
||||||
|
|
||||||
|
@Inject()
|
||||||
|
baseSysConfService: BaseSysConfService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 清空日志
|
* 清空日志
|
||||||
*/
|
*/
|
||||||
@Post('/clear')
|
@Post('/clear')
|
||||||
public async clear() {
|
public async clear() {
|
||||||
await this.adminSysLogService.clear(true);
|
await this.baseSysLogService.clear(true);
|
||||||
return this.ok();
|
return this.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置日志保存时间
|
||||||
|
*/
|
||||||
|
@Post('/setKeep')
|
||||||
|
public async setKeep(@Body() value: number) {
|
||||||
|
await this.baseSysConfService.updateVaule('logKeep', value);
|
||||||
|
return this.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得日志保存时间
|
||||||
|
*/
|
||||||
|
@Get('/getKeep')
|
||||||
|
public async getKeep() {
|
||||||
|
return this.ok(await this.baseSysConfService.getValue('logKeep'));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -8,7 +8,7 @@ import { BaseSysMenuService } from '../../../service/sys/menu';
|
|||||||
*/
|
*/
|
||||||
@Provide()
|
@Provide()
|
||||||
@CoolController({
|
@CoolController({
|
||||||
api: ['add', 'delete', 'update', 'list', 'page'],
|
api: ['add', 'delete', 'update', 'info', 'list', 'page'],
|
||||||
entity: BaseSysMenuEntity,
|
entity: BaseSysMenuEntity,
|
||||||
service: BaseSysMenuService
|
service: BaseSysMenuService
|
||||||
})
|
})
|
||||||
|
|||||||
34
src/app/modules/base/controller/admin/sys/param.ts
Normal file
34
src/app/modules/base/controller/admin/sys/param.ts
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import { Get, Inject, Provide, Query } from '@midwayjs/decorator';
|
||||||
|
import { Context } from 'egg';
|
||||||
|
import { CoolController, BaseController } from 'midwayjs-cool-core';
|
||||||
|
import { BaseSysParamEntity } from '../../../entity/sys/param';
|
||||||
|
import { BaseSysParamService } from '../../../service/sys/param';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 参数配置
|
||||||
|
*/
|
||||||
|
@Provide()
|
||||||
|
@CoolController({
|
||||||
|
api: ['add', 'delete', 'update', 'info', 'page'],
|
||||||
|
entity: BaseSysParamEntity,
|
||||||
|
pageQueryOp: {
|
||||||
|
keyWordLikeFields: ['name', 'keyName']
|
||||||
|
}
|
||||||
|
})
|
||||||
|
export class BaseSysParamController extends BaseController {
|
||||||
|
|
||||||
|
@Inject()
|
||||||
|
baseSysParamService: BaseSysParamService;
|
||||||
|
|
||||||
|
@Inject()
|
||||||
|
ctx: Context;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据配置参数key获得网页内容(富文本)
|
||||||
|
*/
|
||||||
|
@Get('/html')
|
||||||
|
async htmlByKey(@Query() key: string) {
|
||||||
|
this.ctx.body = await this.baseSysParamService.htmlByKey(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -10,6 +10,7 @@ import { BaseSysRoleEntity } from '../../../entity/sys/role';
|
|||||||
@CoolController({
|
@CoolController({
|
||||||
api: ['add', 'delete', 'update', 'info', 'list', 'page'],
|
api: ['add', 'delete', 'update', 'info', 'list', 'page'],
|
||||||
entity: BaseSysRoleEntity,
|
entity: BaseSysRoleEntity,
|
||||||
|
// 新增的时候插入当前用户ID
|
||||||
insertParam: (async (ctx: Context) => {
|
insertParam: (async (ctx: Context) => {
|
||||||
return {
|
return {
|
||||||
userId: ctx.admin.userId
|
userId: ctx.admin.userId
|
||||||
|
|||||||
@ -9,20 +9,21 @@ import { BaseSysUserService } from '../../../service/sys/user';
|
|||||||
@Provide()
|
@Provide()
|
||||||
@CoolController({
|
@CoolController({
|
||||||
api: ['add', 'delete', 'update', 'info', 'list', 'page'],
|
api: ['add', 'delete', 'update', 'info', 'list', 'page'],
|
||||||
entity: BaseSysUserEntity
|
entity: BaseSysUserEntity,
|
||||||
|
service: BaseSysUserService
|
||||||
})
|
})
|
||||||
export class BaseSysUserController extends BaseController {
|
export class BaseSysUserController extends BaseController {
|
||||||
|
|
||||||
@Inject()
|
@Inject()
|
||||||
BaseSysUserService: BaseSysUserService;
|
baseSysUserService: BaseSysUserService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 移动部门
|
* 移动部门
|
||||||
*/
|
*/
|
||||||
@Post('/move')
|
@Post('/move')
|
||||||
async move(@Body() departmentId: number, @Body() userIds: []) {
|
async move(@Body() departmentId: number, @Body() userIds: []) {
|
||||||
await this.BaseSysUserService.move(departmentId, userIds);
|
await this.baseSysUserService.move(departmentId, userIds);
|
||||||
this.ok();
|
return this.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -27,7 +27,4 @@ export class BaseSysLogEntity extends BaseEntity {
|
|||||||
@Column({ comment: '参数', nullable: true, type: 'text' })
|
@Column({ comment: '参数', nullable: true, type: 'text' })
|
||||||
params: string;
|
params: string;
|
||||||
|
|
||||||
@Column({ comment: '响应毫秒数, 值为-1则响应不成功', default: -1 })
|
|
||||||
ms: number;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
27
src/app/modules/base/entity/sys/param.ts
Normal file
27
src/app/modules/base/entity/sys/param.ts
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import { EntityModel } from '@midwayjs/orm';
|
||||||
|
import { BaseEntity } from 'midwayjs-cool-core';
|
||||||
|
import { Column, Index } from 'typeorm';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 参数配置
|
||||||
|
*/
|
||||||
|
@EntityModel('base_sys_param')
|
||||||
|
export class BaseSysParamEntity extends BaseEntity {
|
||||||
|
|
||||||
|
@Index()
|
||||||
|
@Column({ comment: '键位' })
|
||||||
|
keyName: string;
|
||||||
|
|
||||||
|
@Column({comment: '名称'})
|
||||||
|
name: string;
|
||||||
|
|
||||||
|
@Column({comment: '数据', type: 'text' })
|
||||||
|
data: string;
|
||||||
|
|
||||||
|
@Column({comment: '数据类型 0:字符串 1:数组 2:键值对', default: 0, type: 'tinyint' })
|
||||||
|
dataType: number;
|
||||||
|
|
||||||
|
@Column({ comment: '备注', nullable: true })
|
||||||
|
remark: string;
|
||||||
|
|
||||||
|
}
|
||||||
@ -38,9 +38,13 @@ export class BaseSysUserEntity extends BaseEntity {
|
|||||||
@Column({ comment: '邮箱', nullable: true })
|
@Column({ comment: '邮箱', nullable: true })
|
||||||
email: string;
|
email: string;
|
||||||
|
|
||||||
@Column({ comment: '备注', nullable: true, length: 500 })
|
@Column({ comment: '备注', nullable: true })
|
||||||
remark: string;
|
remark: string;
|
||||||
|
|
||||||
@Column({ comment: '状态 0:禁用 1:启用', default: 1, type: 'tinyint' })
|
@Column({ comment: '状态 0:禁用 1:启用', default: 1, type: 'tinyint' })
|
||||||
status: number;
|
status: number;
|
||||||
|
// 部门名称
|
||||||
|
departmentName: string;
|
||||||
|
// 角色ID列表
|
||||||
|
roleIdList: number[];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import * as jwt from 'jsonwebtoken';
|
|||||||
import { Context } from 'egg';
|
import { Context } from 'egg';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 描述
|
* 权限校验
|
||||||
*/
|
*/
|
||||||
@Provide()
|
@Provide()
|
||||||
export class BaseAuthorityMiddleware implements IWebMiddleware {
|
export class BaseAuthorityMiddleware implements IWebMiddleware {
|
||||||
|
|||||||
@ -14,7 +14,7 @@ export class BaseLogMiddleware implements IWebMiddleware {
|
|||||||
|
|
||||||
resolve() {
|
resolve() {
|
||||||
return async (ctx: Context, next: IMidwayWebNext) => {
|
return async (ctx: Context, next: IMidwayWebNext) => {
|
||||||
this.baseSysLogService.record(ctx.url.split('?')[0], ctx.req.method === 'GET' ? ctx.request.query : ctx.request.body, ctx.admin ? ctx.admin.userId : null);
|
this.baseSysLogService.record(ctx, ctx.url.split('?')[0], ctx.req.method === 'GET' ? ctx.request.query : ctx.request.body, ctx.admin ? ctx.admin.userId : null);
|
||||||
await next();
|
await next();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
29
src/app/modules/base/schedule/log.ts
Normal file
29
src/app/modules/base/schedule/log.ts
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
// src/schedule/hello.ts
|
||||||
|
import { Provide, Inject, Schedule, CommonSchedule } from '@midwayjs/decorator';
|
||||||
|
import { BaseSysLogService } from '../service/sys/log';
|
||||||
|
import { ILogger } from '@midwayjs/logger';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 日志定时任务
|
||||||
|
*/
|
||||||
|
@Provide()
|
||||||
|
@Schedule({
|
||||||
|
cron: '0 0 0 * * *', // 每天0点执行
|
||||||
|
type: 'worker' // 指定某一个 worker 执行
|
||||||
|
})
|
||||||
|
export class BaseLogSchedule implements CommonSchedule {
|
||||||
|
|
||||||
|
@Inject()
|
||||||
|
baseSysLogService: BaseSysLogService;
|
||||||
|
|
||||||
|
@Inject()
|
||||||
|
logger: ILogger;
|
||||||
|
|
||||||
|
// 定时执行的具体任务
|
||||||
|
async exec() {
|
||||||
|
this.logger.info('清除日志定时任务开始执行');
|
||||||
|
const startTime = Date.now();
|
||||||
|
await this.baseSysLogService.clear();
|
||||||
|
this.logger.info(`清除日志定时任务结束,耗时:${(Date.now() - startTime)}ms`);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -26,25 +26,23 @@ export class BaseSysDepartmentService extends BaseService {
|
|||||||
@Inject()
|
@Inject()
|
||||||
ctx: Context;
|
ctx: Context;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得部门菜单
|
* 获得部门菜单
|
||||||
*/
|
*/
|
||||||
async list () {
|
async list() {
|
||||||
const permsDepartmentArr = await this.baseSysPermsService.departmentIds(this.ctx.admin.userId); // 部门权限
|
// 部门权限
|
||||||
const departments = await this.nativeQuery(`
|
const permsDepartmentArr = await this.baseSysPermsService.departmentIds(this.ctx.admin.userId);
|
||||||
SELECT
|
|
||||||
*
|
// 过滤部门权限
|
||||||
FROM
|
const find = this.baseSysDepartmentEntity.createQueryBuilder();
|
||||||
base_sys_department a
|
if (this.ctx.admin.username !== 'admin') find.andWhere('id in (:ids)', { ids: !_.isEmpty(permsDepartmentArr) ? permsDepartmentArr : [null] });
|
||||||
WHERE
|
find.addOrderBy('orderNum', 'ASC');
|
||||||
1 = 1
|
const departments: BaseSysDepartmentEntity[] = await find.getMany();
|
||||||
${ this.setSql(this.ctx.admin.userId !== '1', 'and a.id in (?)', [ !_.isEmpty(permsDepartmentArr) ? permsDepartmentArr : [ null ] ]) }
|
|
||||||
ORDER BY
|
|
||||||
a.orderNum ASC`);
|
|
||||||
if (!_.isEmpty(departments)) {
|
if (!_.isEmpty(departments)) {
|
||||||
departments.forEach(e => {
|
departments.forEach(e => {
|
||||||
const parentMenu = departments.filter(m => {
|
const parentMenu = departments.filter(m => {
|
||||||
if (e.parentId === m.id) {
|
if (e.parentId == m.id) {
|
||||||
return m.name;
|
return m.name;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -83,7 +81,7 @@ export class BaseSysDepartmentService extends BaseService {
|
|||||||
* 部门排序
|
* 部门排序
|
||||||
* @param params
|
* @param params
|
||||||
*/
|
*/
|
||||||
async order (params) {
|
async order(params) {
|
||||||
for (const e of params) {
|
for (const e of params) {
|
||||||
await this.baseSysDepartmentEntity.update(e.id, e);
|
await this.baseSysDepartmentEntity.update(e.id, e);
|
||||||
}
|
}
|
||||||
@ -92,15 +90,15 @@ export class BaseSysDepartmentService extends BaseService {
|
|||||||
/**
|
/**
|
||||||
* 删除
|
* 删除
|
||||||
*/
|
*/
|
||||||
async delete (ids: number[]) {
|
async delete(ids: number[]) {
|
||||||
let { deleteUser } = this.ctx.request.body;
|
let { deleteUser } = this.ctx.request.body;
|
||||||
await this.baseSysDepartmentEntity.delete(ids);
|
await this.baseSysDepartmentEntity.delete(ids);
|
||||||
if (deleteUser) {
|
if (deleteUser) {
|
||||||
await this.nativeQuery('delete from base_sys_user where departmentId in (?)', [ ids ]);
|
await this.nativeQuery('delete from base_sys_user where departmentId in (?)', [ids]);
|
||||||
} else {
|
} else {
|
||||||
const topDepartment = await this.baseSysDepartmentEntity.createQueryBuilder().where('parentId is null').getOne();
|
const topDepartment = await this.baseSysDepartmentEntity.createQueryBuilder().where('parentId is null').getOne();
|
||||||
if (topDepartment) {
|
if (topDepartment) {
|
||||||
await this.nativeQuery('update base_sys_user a set a.departmentId = ? where a.departmentId in (?)', [ topDepartment.id, ids ]);
|
await this.nativeQuery('update base_sys_user a set a.departmentId = ? where a.departmentId in (?)', [topDepartment.id, ids]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,8 @@ import { Context } from 'egg';
|
|||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import { BaseSysLogEntity } from '../../entity/sys/log';
|
import { BaseSysLogEntity } from '../../entity/sys/log';
|
||||||
import * as moment from 'moment';
|
import * as moment from 'moment';
|
||||||
import { Helper } from '../../../../extend/helper';
|
import { Utils } from '../../../../comm/utils';
|
||||||
|
import { BaseSysConfService } from './conf';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 描述
|
* 描述
|
||||||
@ -17,31 +18,34 @@ export class BaseSysLogService extends BaseService {
|
|||||||
@Inject()
|
@Inject()
|
||||||
ctx: Context;
|
ctx: Context;
|
||||||
|
|
||||||
// @Inject()
|
@Inject()
|
||||||
// helper: Helper;
|
utils: Utils;
|
||||||
|
|
||||||
@InjectEntityModel(BaseSysLogEntity)
|
@InjectEntityModel(BaseSysLogEntity)
|
||||||
baseSysLogEntity: Repository<BaseSysLogEntity>;
|
baseSysLogEntity: Repository<BaseSysLogEntity>;
|
||||||
|
|
||||||
|
@Inject()
|
||||||
|
baseSysConfService: BaseSysConfService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 记录
|
* 记录
|
||||||
* @param url URL地址
|
* @param url URL地址
|
||||||
* @param params 参数
|
* @param params 参数
|
||||||
* @param userId 用户ID
|
* @param userId 用户ID
|
||||||
*/
|
*/
|
||||||
async record(url, params, userId) {
|
async record(context: Context, url, params, userId) {
|
||||||
// const ip = await this.helper.getReqIP(this.ctx);
|
const ip = await this.utils.getReqIP(context)
|
||||||
// const sysLog = new BaseSysLogEntity();
|
const sysLog = new BaseSysLogEntity();
|
||||||
// sysLog.userId = userId;
|
sysLog.userId = userId;
|
||||||
// sysLog.ip = ip;
|
sysLog.ip = typeof ip === 'string' ? ip : ip.join(',');
|
||||||
// const ipAddrArr = new Array();
|
const ipAddrArr = new Array();
|
||||||
// for (const e of ip.split(',')) ipAddrArr.push(await this.ctx.helper.getIpAddr(e));
|
for (const e of sysLog.ip.split(',')) ipAddrArr.push(await await this.utils.getIpAddr(context, e));
|
||||||
// sysLog.ipAddr = ipAddrArr.join(',');
|
sysLog.ipAddr = ipAddrArr.join(',');
|
||||||
// sysLog.action = url;
|
sysLog.action = url;
|
||||||
// if (!_.isEmpty(params)) {
|
if (!_.isEmpty(params)) {
|
||||||
// sysLog.params = JSON.stringify(params);
|
sysLog.params = JSON.stringify(params);
|
||||||
// }
|
}
|
||||||
// await this.baseSysLogEntity.insert(sysLog);
|
await this.baseSysLogEntity.insert(sysLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -53,12 +57,12 @@ export class BaseSysLogService extends BaseService {
|
|||||||
await this.baseSysLogEntity.clear();
|
await this.baseSysLogEntity.clear();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const keepDay = await this.ctx.service.sys.conf.getValue('logKeep');
|
const keepDay = await this.baseSysConfService.getValue('logKeep');
|
||||||
if (keepDay) {
|
if (keepDay) {
|
||||||
const beforeDate = `${moment().subtract(keepDay, 'days').format('YYYY-MM-DD')} 00:00:00`;
|
const beforeDate = `${moment().add(-keepDay, 'days').format('YYYY-MM-DD')} 00:00:00`;
|
||||||
await this.baseSysLogEntity.createQueryBuilder()
|
await this.baseSysLogEntity.createQueryBuilder()
|
||||||
.where('createTime < :createTime', { createTime: beforeDate })
|
.where('createTime < :createTime', { createTime: beforeDate })
|
||||||
await this.nativeQuery(' delete from sys_log where createTime < ? ', [beforeDate]);
|
await this.nativeQuery(' delete from base_sys_log where createTime < ? ', [beforeDate]);
|
||||||
} else {
|
} else {
|
||||||
await this.baseSysLogEntity.clear();
|
await this.baseSysLogEntity.clear();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -48,21 +48,26 @@ export class BaseSysLoginService extends BaseService {
|
|||||||
*/
|
*/
|
||||||
async login(login: LoginDTO) {
|
async login(login: LoginDTO) {
|
||||||
const { username, captchaId, verifyCode, password } = login;
|
const { username, captchaId, verifyCode, password } = login;
|
||||||
|
// 校验验证码
|
||||||
const checkV = await this.captchaCheck(captchaId, verifyCode);
|
const checkV = await this.captchaCheck(captchaId, verifyCode);
|
||||||
if (checkV) {
|
if (checkV) {
|
||||||
const user = await this.baseSysUserEntity.findOne({ username });
|
const user = await this.baseSysUserEntity.findOne({ username });
|
||||||
|
// 校验用户
|
||||||
if (user) {
|
if (user) {
|
||||||
|
// 校验用户状态及密码
|
||||||
if (user.status === 0 || user.password !== md5(password)) {
|
if (user.status === 0 || user.password !== md5(password)) {
|
||||||
throw new CoolCommException('账户或密码不正确~');
|
throw new CoolCommException('账户或密码不正确~');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new CoolCommException('账户或密码不正确~');
|
throw new CoolCommException('账户或密码不正确~');
|
||||||
}
|
}
|
||||||
|
// 校验角色
|
||||||
const roleIds = await this.baseSysRoleService.getByUser(user.id);
|
const roleIds = await this.baseSysRoleService.getByUser(user.id);
|
||||||
if (_.isEmpty(roleIds)) {
|
if (_.isEmpty(roleIds)) {
|
||||||
throw new CoolCommException('该用户未设置任何角色,无法登录~');
|
throw new CoolCommException('该用户未设置任何角色,无法登录~');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 生成token
|
||||||
const { expire, refreshExpire } = this.coolConfig.jwt.token;
|
const { expire, refreshExpire } = this.coolConfig.jwt.token;
|
||||||
const result = {
|
const result = {
|
||||||
expire,
|
expire,
|
||||||
@ -71,12 +76,13 @@ export class BaseSysLoginService extends BaseService {
|
|||||||
refreshToken: await this.generateToken(user, roleIds, refreshExpire, true),
|
refreshToken: await this.generateToken(user, roleIds, refreshExpire, true),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 将用户相关信息保存到缓存
|
||||||
const perms = await this.baseSysMenuService.getPerms(roleIds);
|
const perms = await this.baseSysMenuService.getPerms(roleIds);
|
||||||
const departments = await this.baseSysDepartmentService.getByRoleIds(roleIds, user.username === 'admin');
|
const departments = await this.baseSysDepartmentService.getByRoleIds(roleIds, user.username === 'admin');
|
||||||
await this.coolCache.set(`admin:department:${user.id}`, JSON.stringify(departments));
|
await this.coolCache.set(`admin:department:${user.id}`, JSON.stringify(departments));
|
||||||
await this.coolCache.set(`admin:perms:${user.id}`, JSON.stringify(perms));
|
await this.coolCache.set(`admin:perms:${user.id}`, JSON.stringify(perms));
|
||||||
await this.coolCache.set(`admin:token:${user.id}`, result.token, expire);
|
await this.coolCache.set(`admin:token:${user.id}`, result.token);
|
||||||
await this.coolCache.set(`admin:token:refresh:${user.id}`, result.token, refreshExpire);
|
await this.coolCache.set(`admin:token:refresh:${user.id}`, result.token);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
} else {
|
} else {
|
||||||
@ -162,12 +168,29 @@ export class BaseSysLoginService extends BaseService {
|
|||||||
try {
|
try {
|
||||||
const decoded = jwt.verify(token, this.coolConfig.jwt.secret);
|
const decoded = jwt.verify(token, this.coolConfig.jwt.secret);
|
||||||
if (decoded && decoded['isRefresh']) {
|
if (decoded && decoded['isRefresh']) {
|
||||||
return jwt.sign(decoded,
|
delete decoded['exp'];
|
||||||
|
delete decoded['iat'];
|
||||||
|
|
||||||
|
const { expire, refreshExpire } = this.coolConfig.jwt.token;
|
||||||
|
decoded['isRefresh'] = false;
|
||||||
|
const result = {
|
||||||
|
expire,
|
||||||
|
token: jwt.sign(decoded,
|
||||||
|
this.coolConfig.jwt.secret, {
|
||||||
|
expiresIn: expire,
|
||||||
|
}),
|
||||||
|
refreshExpire,
|
||||||
|
refreshToken: '',
|
||||||
|
};
|
||||||
|
decoded['isRefresh'] = true;
|
||||||
|
result.refreshToken = jwt.sign(decoded,
|
||||||
this.coolConfig.jwt.secret, {
|
this.coolConfig.jwt.secret, {
|
||||||
expiresIn: this.coolConfig.jwt.token.expire,
|
expiresIn: refreshExpire,
|
||||||
});
|
});
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
this.ctx.status = 401;
|
this.ctx.status = 401;
|
||||||
this.ctx.body = {
|
this.ctx.body = {
|
||||||
code: RESCODE.COMMFAIL,
|
code: RESCODE.COMMFAIL,
|
||||||
|
|||||||
@ -38,6 +38,16 @@ export class BaseSysMenuService extends BaseService {
|
|||||||
return menus;
|
return menus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改之后
|
||||||
|
* @param param
|
||||||
|
*/
|
||||||
|
async modifyAfter(param) {
|
||||||
|
if (param.id) {
|
||||||
|
await this.refreshPerms(param.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据角色获得权限信息
|
* 根据角色获得权限信息
|
||||||
* @param {[]} roleIds 数组
|
* @param {[]} roleIds 数组
|
||||||
|
|||||||
61
src/app/modules/base/service/sys/param.ts
Normal file
61
src/app/modules/base/service/sys/param.ts
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
import { Inject, Provide } from '@midwayjs/decorator';
|
||||||
|
import { BaseService, CoolCache } from 'midwayjs-cool-core';
|
||||||
|
import { InjectEntityModel } from '@midwayjs/orm';
|
||||||
|
import { Repository } from 'typeorm';
|
||||||
|
import { BaseSysParamEntity } from '../../entity/sys/param';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 参数配置
|
||||||
|
*/
|
||||||
|
@Provide()
|
||||||
|
export class BaseSysParamService extends BaseService {
|
||||||
|
|
||||||
|
@InjectEntityModel(BaseSysParamEntity)
|
||||||
|
baseSysParamEntity: Repository<BaseSysParamEntity>;
|
||||||
|
|
||||||
|
@Inject('cool:cache')
|
||||||
|
coolCache: CoolCache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据key获得对应的参数
|
||||||
|
* @param key
|
||||||
|
*/
|
||||||
|
async dataByKey (key) {
|
||||||
|
let result = await this.coolCache.get(`param:${ key }`);
|
||||||
|
if (result) {
|
||||||
|
result = JSON.parse(result);
|
||||||
|
if (result.dataType !== 0) {
|
||||||
|
return JSON.parse(result.data);
|
||||||
|
} else {
|
||||||
|
return result.data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据key获得对应的网页数据
|
||||||
|
* @param key
|
||||||
|
*/
|
||||||
|
async htmlByKey (key) {
|
||||||
|
let html = '<html><body>@content</body></html>';
|
||||||
|
let result = await this.coolCache.get(`param:${ key }`);
|
||||||
|
if (result) {
|
||||||
|
result = JSON.parse(result);
|
||||||
|
html = html.replace('@content', result.data);
|
||||||
|
} else {
|
||||||
|
html = html.replace('@content', 'key notfound');
|
||||||
|
}
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重新初始化缓存
|
||||||
|
*/
|
||||||
|
async modifyAfter () {
|
||||||
|
const params = await this.baseSysParamEntity.find();
|
||||||
|
for (const param of params) {
|
||||||
|
await this.coolCache.set(`param:${ param.keyName }`, JSON.stringify(param));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -3,9 +3,10 @@ import { BaseService, CoolCache } from 'midwayjs-cool-core';
|
|||||||
import { BaseSysMenuService } from './menu';
|
import { BaseSysMenuService } from './menu';
|
||||||
import { BaseSysRoleService } from './role';
|
import { BaseSysRoleService } from './role';
|
||||||
import { BaseSysDepartmentService } from './department';
|
import { BaseSysDepartmentService } from './department';
|
||||||
|
import { Context } from 'egg';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 描述
|
* 权限
|
||||||
*/
|
*/
|
||||||
@Provide()
|
@Provide()
|
||||||
export class BaseSysPermsService extends BaseService {
|
export class BaseSysPermsService extends BaseService {
|
||||||
@ -21,6 +22,9 @@ export class BaseSysPermsService extends BaseService {
|
|||||||
|
|
||||||
@Inject()
|
@Inject()
|
||||||
baseSysDepartmentService: BaseSysDepartmentService;
|
baseSysDepartmentService: BaseSysDepartmentService;
|
||||||
|
|
||||||
|
@Inject()
|
||||||
|
ctx: Context;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -29,11 +33,11 @@ export class BaseSysPermsService extends BaseService {
|
|||||||
*/
|
*/
|
||||||
async refreshPerms(userId) {
|
async refreshPerms(userId) {
|
||||||
const roleIds = await this.baseSysRoleService.getByUser(userId);
|
const roleIds = await this.baseSysRoleService.getByUser(userId);
|
||||||
const perms = await this.ctx.service.sys.menu.getPerms(roleIds);
|
const perms = await this.baseSysMenuService.getPerms(roleIds);
|
||||||
await this.coolCache.set(`admin:perms:${userId}`, JSON.stringify(perms), this.app.config.token.expires);
|
await this.coolCache.set(`admin:perms:${userId}`, JSON.stringify(perms));
|
||||||
// 更新部门权限
|
// 更新部门权限
|
||||||
const departments = await this.baseSysDepartmentService.getByRoleIds(roleIds, this.ctx.admin.username === 'admin');
|
const departments = await this.baseSysDepartmentService.getByRoleIds(roleIds, this.ctx.admin.username === 'admin');
|
||||||
await this.coolCache.set(`admin:department:${userId}`, JSON.stringify(departments), this.app.config.token.expires);
|
await this.coolCache.set(`admin:department:${userId}`, JSON.stringify(departments));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1,8 +1,13 @@
|
|||||||
import { Provide } from '@midwayjs/decorator';
|
import { Inject, Provide } from '@midwayjs/decorator';
|
||||||
import { BaseService } from 'midwayjs-cool-core';
|
import { BaseService, CoolCache, CoolCommException } from 'midwayjs-cool-core';
|
||||||
import { InjectEntityModel } from '@midwayjs/orm';
|
import { InjectEntityModel } from '@midwayjs/orm';
|
||||||
import { Repository } from 'typeorm';
|
import { Repository } from 'typeorm';
|
||||||
import { BaseSysUserEntity } from '../../entity/sys/user';
|
import { BaseSysUserEntity } from '../../entity/sys/user';
|
||||||
|
import { BaseSysPermsService } from './perms';
|
||||||
|
import * as _ from 'lodash';
|
||||||
|
import { BaseSysUserRoleEntity } from '../../entity/sys/user_role';
|
||||||
|
import * as md5 from 'md5';
|
||||||
|
import { BaseSysDepartmentEntity } from '../../entity/sys/department';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统用户
|
* 系统用户
|
||||||
@ -13,6 +18,46 @@ export class BaseSysUserService extends BaseService {
|
|||||||
@InjectEntityModel(BaseSysUserEntity)
|
@InjectEntityModel(BaseSysUserEntity)
|
||||||
baseSysUserEntity: Repository<BaseSysUserEntity>;
|
baseSysUserEntity: Repository<BaseSysUserEntity>;
|
||||||
|
|
||||||
|
@InjectEntityModel(BaseSysUserRoleEntity)
|
||||||
|
baseSysUserRoleEntity: Repository<BaseSysUserRoleEntity>;
|
||||||
|
|
||||||
|
@InjectEntityModel(BaseSysDepartmentEntity)
|
||||||
|
baseSysDepartmentEntity: Repository<BaseSysDepartmentEntity>;
|
||||||
|
|
||||||
|
@Inject('cool:cache')
|
||||||
|
coolCache: CoolCache;
|
||||||
|
|
||||||
|
@Inject()
|
||||||
|
baseSysPermsService: BaseSysPermsService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询
|
||||||
|
* @param query
|
||||||
|
*/
|
||||||
|
async page(query) {
|
||||||
|
const { keyWord, status, departmentIds = '' } = query;
|
||||||
|
const permsDepartmentArr = await this.baseSysPermsService.departmentIds(this.ctx.admin.userId); // 部门权限
|
||||||
|
const sql = `
|
||||||
|
SELECT
|
||||||
|
a.id,a.name,a.nickName,a.headImg,a.email,a.remark,a.status,a.createTime,a.updateTime,a.username,a.phone,a.departmentId,
|
||||||
|
GROUP_CONCAT(c.name) AS roleName,
|
||||||
|
d.name as departmentName
|
||||||
|
FROM
|
||||||
|
base_sys_user a
|
||||||
|
LEFT JOIN base_sys_user_role b ON a.id = b.userId
|
||||||
|
LEFT JOIN base_sys_role c ON b.roleId = c.id
|
||||||
|
LEFT JOIN base_sys_department d on a.departmentId = d.id
|
||||||
|
WHERE 1 = 1
|
||||||
|
${this.setSql(!_.isEmpty(departmentIds), 'and a.departmentId in (?)', [departmentIds])}
|
||||||
|
${this.setSql(status, 'and a.status = ?', [status])}
|
||||||
|
${this.setSql(keyWord, 'and (a.name LIKE ? or a.username LIKE ?)', [`%${keyWord}%`, `%${keyWord}%`])}
|
||||||
|
${this.setSql(true, 'and a.username != ?', ['admin'])}
|
||||||
|
${this.setSql(this.ctx.admin.username !== 'admin', 'and a.departmentId in (?)', [!_.isEmpty(permsDepartmentArr) ? permsDepartmentArr : [null]])}
|
||||||
|
GROUP BY a.id
|
||||||
|
`;
|
||||||
|
return this.sqlRenderPage(sql, query);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 移动部门
|
* 移动部门
|
||||||
* @param departmentId
|
* @param departmentId
|
||||||
@ -21,7 +66,7 @@ export class BaseSysUserService extends BaseService {
|
|||||||
async move(departmentId, userIds) {
|
async move(departmentId, userIds) {
|
||||||
await this.baseSysUserEntity.createQueryBuilder()
|
await this.baseSysUserEntity.createQueryBuilder()
|
||||||
.update().set({ departmentId })
|
.update().set({ departmentId })
|
||||||
.where('id =: (:userIds)', { userIds })
|
.where('id in (:userIds)', { userIds })
|
||||||
.execute();
|
.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,4 +76,115 @@ export class BaseSysUserService extends BaseService {
|
|||||||
async person() {
|
async person() {
|
||||||
return await this.baseSysUserEntity.findOne({ id: this.ctx.admin.userId })
|
return await this.baseSysUserEntity.findOne({ id: this.ctx.admin.userId })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新用户角色关系
|
||||||
|
* @param user
|
||||||
|
*/
|
||||||
|
async updateUserRole(user) {
|
||||||
|
if (user.username === 'admin') {
|
||||||
|
throw new CoolCommException('非法操作~');
|
||||||
|
}
|
||||||
|
await this.baseSysUserRoleEntity.delete({ userId: user.id });
|
||||||
|
if (user.roleIdList) {
|
||||||
|
for (const roleId of user.roleIdList) {
|
||||||
|
await this.baseSysUserRoleEntity.save({ userId: user.id, roleId });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await this.baseSysPermsService.refreshPerms(user.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增
|
||||||
|
* @param param
|
||||||
|
*/
|
||||||
|
async add(param) {
|
||||||
|
const exists = await this.baseSysUserEntity.findOne({ username: param.username });
|
||||||
|
if (!_.isEmpty(exists)) {
|
||||||
|
throw new CoolCommException('用户名已经存在~');
|
||||||
|
}
|
||||||
|
param.password = md5('123456'); // 默认密码 建议未改密码不能登陆
|
||||||
|
await this.baseSysUserEntity.save(param);
|
||||||
|
await this.updateUserRole(param);
|
||||||
|
return param.id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据ID获得信息
|
||||||
|
* @param id
|
||||||
|
*/
|
||||||
|
public async info (id) {
|
||||||
|
const info = await this.baseSysUserEntity.findOne({ id });
|
||||||
|
const userRoles = await this.nativeQuery('select a.roleId from base_sys_user_role a where a.userId = ?', [ id ]);
|
||||||
|
const department = await this.baseSysDepartmentEntity.findOne({ id: info.departmentId });
|
||||||
|
if (info) {
|
||||||
|
delete info.password;
|
||||||
|
if (userRoles) {
|
||||||
|
info.roleIdList = userRoles.map(e => {
|
||||||
|
return parseInt(e.roleId);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete info.password;
|
||||||
|
if (department) {
|
||||||
|
info.departmentName = department.name;
|
||||||
|
}
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改个人信息
|
||||||
|
* @param param
|
||||||
|
*/
|
||||||
|
public async personUpdate (param) {
|
||||||
|
param.id = this.ctx.admin.userId;
|
||||||
|
if (!_.isEmpty(param.password)) {
|
||||||
|
param.password = md5(param.password);
|
||||||
|
const userInfo = await this.baseSysUserEntity.findOne({ id: param.id });
|
||||||
|
if (!userInfo) {
|
||||||
|
throw new CoolCommException('用户不存在');
|
||||||
|
}
|
||||||
|
param.passwordV = userInfo.passwordV + 1;
|
||||||
|
await this.coolCache.set(`admin:passwordVersion:${param.id}`, param.passwordV);
|
||||||
|
} else {
|
||||||
|
delete param.password;
|
||||||
|
}
|
||||||
|
await this.baseSysUserEntity.save(param);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改
|
||||||
|
* @param param 数据
|
||||||
|
*/
|
||||||
|
async update(param) {
|
||||||
|
if (param.id && param.username === 'admin') {
|
||||||
|
throw new CoolCommException('非法操作~');
|
||||||
|
}
|
||||||
|
if (!_.isEmpty(param.password)) {
|
||||||
|
param.password = md5(param.password);
|
||||||
|
const userInfo = await this.ctx.repo.sys.User.findOne({ id: param.id });
|
||||||
|
if (!userInfo) {
|
||||||
|
throw new CoolCommException('用户不存在');
|
||||||
|
}
|
||||||
|
param.passwordV = userInfo.passwordV + 1;
|
||||||
|
await this.coolCache.set(`admin:passwordVersion:${param.id}`, param.passwordV);
|
||||||
|
} else {
|
||||||
|
delete param.password;
|
||||||
|
}
|
||||||
|
if (param.status === 0) {
|
||||||
|
await this.forbidden(param.id);
|
||||||
|
}
|
||||||
|
await this.baseSysUserEntity.save(param);
|
||||||
|
await this.updateUserRole(param);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 禁用用户
|
||||||
|
* @param userId
|
||||||
|
*/
|
||||||
|
async forbidden(userId) {
|
||||||
|
await this.coolCache.del(`admin:token:${userId}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -74,6 +74,12 @@ export default (appInfo: EggAppInfo) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 文件上传
|
||||||
|
config.multipart = {
|
||||||
|
fileSize: '100mb',
|
||||||
|
mode: 'file'
|
||||||
|
};
|
||||||
|
|
||||||
// 将egg日志替换成midway
|
// 将egg日志替换成midway
|
||||||
config.midwayFeature = {
|
config.midwayFeature = {
|
||||||
replaceEggLogger: true
|
replaceEggLogger: true
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user