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

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
+6
View File
@@ -35,6 +35,12 @@ export default class GmController extends Controller {
ctx.body = await ctx.service.gmUser.createGmGroup(group, name, desc); 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() { public async saveGmApiToGroup() {
const { ctx } = this; const { ctx } = this;
const {id, apis} = ctx.request.body; const {id, apis} = ctx.request.body;
+6
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() { public async getMenu() {
const { ctx } = this; const { ctx } = this;
ctx.body = { ctx.body = {
+4 -1
View File
@@ -1,6 +1,7 @@
import { GMUserModel } from '@db/GMUser'; import { GMUserModel } from '@db/GMUser';
import { GMUserGroupModel } from '@db/GMUserGroup' import { GMUserGroupModel } from '@db/GMUserGroup'
import { GMGroupModel } from '@db/GMGroup' import { GMGroupModel } from '@db/GMGroup'
import { GMRecordModel } from '@db/GMRecord'
import { ApiModel } from '@db/Api'; import { ApiModel } from '@db/Api';
module.exports = () => { module.exports = () => {
@@ -50,9 +51,11 @@ module.exports = () => {
}; };
return; return;
} }
console.log(user.uid, ctx.request.url, new Date());
ctx.user = user; ctx.user = user;
await next(); 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||{}));
}
}; };
}; };
+2 -1
View File
@@ -6,6 +6,7 @@ export default (app: Application) => {
router.get('/api', controller.home.index); router.get('/api', controller.home.index);
router.post('/api/login/account', controller.login.login); 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.post('/api/get_route', controller.login.getMenu);
router.get('/api/currentUser', tokenParser, controller.login.currentUser); 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/getapilist',tokenParser, controller.gmaccount.getApiList);
router.post('/api/gmaccount/saveapi',tokenParser, controller.gmaccount.saveApi); router.post('/api/gmaccount/saveapi',tokenParser, controller.gmaccount.saveApi);
router.post('/api/gmaccount/creategmgroup',tokenParser, controller.gmaccount.createGmGroup); 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); 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/getrolelist',tokenParser, controller.users.getrolelist);
router.post('/api/users/createroledata',tokenParser, controller.users.createRoleData); router.post('/api/users/createroledata',tokenParser, controller.users.createRoleData);
}; };
+51 -3
View File
@@ -13,8 +13,9 @@ export default class GMUsers extends Service {
* 后台账号登录 * 后台账号登录
*/ */
public async login(username: string, password: string) { public async login(username: string, password: string) {
// const {ctx} = this; const {ctx} = this;
let user = await GMUserModel.login(username, password); let token = ctx.service.utils.genCode(256);
let user = await GMUserModel.login(username, password, token);
if(user) { if(user) {
let userGroups = await GMUserGroupModel.getUserGroupByUid(user.uid, 1); let userGroups = await GMUserGroupModel.getUserGroupByUid(user.uid, 1);
@@ -26,7 +27,7 @@ export default class GMUsers extends Service {
return { return {
"status": "ok", "status": "ok",
"data": {...user, group} "data": {...user, group, token}
} }
} else { } else {
return { 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": "创建失败"
}
}
}
/** /**
* 用户组添加接口 * 用户组添加接口
*/ */
+5
View File
@@ -32,6 +32,11 @@ export default class GMGroup extends BaseModel {
return result; 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) { public static async getAllGroup(lean = true) {
const list = await GMGroupModel.find().lean(lean); const list = await GMGroupModel.find().lean(lean);
return list; return list;
+31
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);
+7 -6
View File
@@ -31,11 +31,9 @@ export default class GMUser extends BaseModel {
token: string; token: string;
private static async encryptPass(password: string, salt?: string) { private static async encryptPass(password: string, salt?: string) {
console.log(salt)
if(!salt) { if(!salt) {
salt = await bcrypt.genSalt(SALT_WORK_FACTOR); salt = await bcrypt.genSalt(SALT_WORK_FACTOR);
} }
console.log(salt)
let npassword = await bcrypt.hash(password, salt); let npassword = await bcrypt.hash(password, salt);
return {npassword, salt}; return {npassword, salt};
} }
@@ -60,14 +58,12 @@ export default class GMUser extends BaseModel {
return user; 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(); const user = await GMUserModel.findOne({username}).select('salt').lean();
if(user) { if(user) {
let { salt } = user; let { salt } = user;
console.log(salt)
let { npassword } = await this.encryptPass(password, salt); let { npassword } = await this.encryptPass(password, salt);
console.log(username, npassword) const checkUser = await GMUserModel.findOneAndUpdate({username, password: npassword}, { token }).select('uid username name token').lean(lean);
const checkUser = await GMUserModel.findOne({username, password: npassword}).select('uid username name token').lean(lean);
return checkUser; return checkUser;
} else { } else {
return null return null
@@ -81,6 +77,11 @@ export default class GMUser extends BaseModel {
return user; 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); export const GMUserModel = getModelForClass(GMUser);