后台添加修改密码、编辑、记录等功能

This commit is contained in:
luying
2020-09-22 15:14:00 +08:00
parent 780562979e
commit 9f57e52445
8 changed files with 113 additions and 12 deletions

View File

@@ -35,6 +35,12 @@ export default class GmController extends Controller {
ctx.body = await ctx.service.gmUser.createGmGroup(group, name, desc);
}
public async saveGmGroup() {
const { ctx } = this;
const {groupId, group, name, desc} = ctx.request.body;
ctx.body = await ctx.service.gmUser.saveGmGroup(groupId, group, name, desc);
}
public async saveGmApiToGroup() {
const { ctx } = this;
const {id, apis} = ctx.request.body;

View File

@@ -16,6 +16,12 @@ export default class LoginController extends Controller {
};
}
public async changeMyPass() {
const { ctx } = this;
const {uid, password} = ctx.request.body;
ctx.body = await ctx.service.gmUser.changeMyPass(uid, password);
}
public async getMenu() {
const { ctx } = this;
ctx.body = {

View File

@@ -1,6 +1,7 @@
import { GMUserModel } from '@db/GMUser';
import { GMUserGroupModel } from '@db/GMUserGroup'
import { GMGroupModel } from '@db/GMGroup'
import { GMRecordModel } from '@db/GMRecord'
import { ApiModel } from '@db/Api';
module.exports = () => {
@@ -50,9 +51,11 @@ module.exports = () => {
};
return;
}
console.log(user.uid, ctx.request.url, new Date());
ctx.user = user;
await next();
if(ctx.request.method == "POST") {
await GMRecordModel.createRecord(user?user.uid:0, ctx.request.url, JSON.stringify(ctx.request.body||{}), JSON.stringify(ctx.body||{}));
}
};
};

View File

@@ -6,6 +6,7 @@ export default (app: Application) => {
router.get('/api', controller.home.index);
router.post('/api/login/account', controller.login.login);
router.post('/api/login/changeMyPass', tokenParser, controller.login.changeMyPass);
router.post('/api/get_route', controller.login.getMenu);
router.get('/api/currentUser', tokenParser, controller.login.currentUser);
@@ -16,6 +17,7 @@ export default (app: Application) => {
router.post('/api/gmaccount/getapilist',tokenParser, controller.gmaccount.getApiList);
router.post('/api/gmaccount/saveapi',tokenParser, controller.gmaccount.saveApi);
router.post('/api/gmaccount/creategmgroup',tokenParser, controller.gmaccount.createGmGroup);
router.post('/api/gmaccount/savegmgroup',tokenParser, controller.gmaccount.saveGmGroup);
router.post('/api/gmaccount/saveapitogroup',tokenParser, controller.gmaccount.saveGmApiToGroup);
@@ -24,5 +26,4 @@ export default (app: Application) => {
router.post('/api/users/getrolelist',tokenParser, controller.users.getrolelist);
router.post('/api/users/createroledata',tokenParser, controller.users.createRoleData);
};

View File

@@ -13,8 +13,9 @@ export default class GMUsers extends Service {
* 后台账号登录
*/
public async login(username: string, password: string) {
// const {ctx} = this;
let user = await GMUserModel.login(username, password);
const {ctx} = this;
let token = ctx.service.utils.genCode(256);
let user = await GMUserModel.login(username, password, token);
if(user) {
let userGroups = await GMUserGroupModel.getUserGroupByUid(user.uid, 1);
@@ -26,7 +27,7 @@ export default class GMUsers extends Service {
return {
"status": "ok",
"data": {...user, group}
"data": {...user, group, token}
}
} else {
return {
@@ -36,6 +37,33 @@ export default class GMUsers extends Service {
}
}
/**
* 修改我的密码
*/
public async changeMyPass(uid: number, password: string) {
const {ctx} = this;
let user = ctx.user;
if(uid != user.uid) {
return {
"status": "error",
"data": "不可修改其他人的密码"
}
}
let result = await GMUserModel.changePass(uid, password);
if(result) {
return {
"status": "ok",
"data": "修改成功"
}
} else {
return {
"status": "error",
"data": "修改失败"
}
}
}
/**
* 后台账号列表
*/
@@ -188,6 +216,26 @@ export default class GMUsers extends Service {
}
}
/**
* 修改用户组
*/
public async saveGmGroup(groupId: number, group:string, name:string, desc: string) {
// const {ctx} = this;
let result = await GMGroupModel.editGroup(groupId, group, name, desc);
if(result) {
return {
"status": "ok",
"data": "创建成功"
}
} else {
return {
"status": "error",
"data": "创建失败"
}
}
}
/**
* 用户组添加接口
*/

View File

@@ -32,6 +32,11 @@ export default class GMGroup extends BaseModel {
return result;
}
public static async editGroup(groupId: number, group: string, name: string, desc: string, lean = true) {
const result = await GMGroupModel.findOneAndUpdate({ id: groupId }, {$set: {group, desc, name}}).select('uid username name').lean(lean);
return result;
}
public static async getAllGroup(lean = true) {
const list = await GMGroupModel.find().lean(lean);
return list;

31
shared/db/GMRecord.ts Normal file
View File

@@ -0,0 +1,31 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop } from '@typegoose/typegoose';
/**
* GM用户组接口
*/
@index({ uid: 1 })
@index({ api: 1 })
export default class GMRecord extends BaseModel {
@prop({ required: true })
uid: number;
@prop({ required: true })
api: string;
@prop({ required: true })
body: string;
@prop({ required: true })
result: string;
public static async createRecord(uid: number, api: string, body: string, result: string) {
const r = await GMRecordModel.insertMany({uid, api, body, result});
return r;
}
}
export const GMRecordModel = getModelForClass(GMRecord);

View File

@@ -31,11 +31,9 @@ export default class GMUser extends BaseModel {
token: string;
private static async encryptPass(password: string, salt?: string) {
console.log(salt)
if(!salt) {
salt = await bcrypt.genSalt(SALT_WORK_FACTOR);
}
console.log(salt)
let npassword = await bcrypt.hash(password, salt);
return {npassword, salt};
}
@@ -60,14 +58,12 @@ export default class GMUser extends BaseModel {
return user;
}
public static async login(username: string, password: string, lean = true) {
public static async login(username: string, password: string, token: string, lean = true) {
const user = await GMUserModel.findOne({username}).select('salt').lean();
if(user) {
let { salt } = user;
console.log(salt)
let { npassword } = await this.encryptPass(password, salt);
console.log(username, npassword)
const checkUser = await GMUserModel.findOne({username, password: npassword}).select('uid username name token').lean(lean);
const checkUser = await GMUserModel.findOneAndUpdate({username, password: npassword}, { token }).select('uid username name token').lean(lean);
return checkUser;
} else {
return null
@@ -81,6 +77,11 @@ export default class GMUser extends BaseModel {
return user;
}
public static async changePass(uid: number, password: string, lean = true) {
let r = await this.encryptPass(password);
const user = await GMUserModel.findOneAndUpdate({uid}, { password: r.npassword, salt: r.salt}).select('uid username name').lean(lean);
return user;
}
}
export const GMUserModel = getModelForClass(GMUser);