后台:修改权限用表

This commit is contained in:
luying
2022-01-04 11:19:08 +08:00
parent 70068402a1
commit c32744f276
13 changed files with 67 additions and 133 deletions
-2
View File
@@ -63,10 +63,8 @@ app.set('name', 'zyz');
// 全局配置,对所有 env 所有 serverType 生效 // 全局配置,对所有 env 所有 serverType 生效
app.configure(function () { app.configure(function () {
app.loadConfig('database', app.getBase() + '/config/database'); app.loadConfig('database', app.getBase() + '/config/database');
app.loadConfig('serverName', app.getBase() + '/config/serverName');
console.log('env:', app.get('env')); console.log('env:', app.get('env'));
console.log('db:', app.get('database')); console.log('db:', app.get('database'));
console.log('serverName:', app.get('serverName'))
initMongodb(app); initMongodb(app);
initGmMongodb(app); initGmMongodb(app);
@@ -245,18 +245,23 @@ export class EntryHandler {
console.log('user token not found'); console.log('user token not found');
return resResult(STATUS.TOKEN_ERR); return resResult(STATUS.TOKEN_ERR);
} }
if(!user.isEnable) {
return resResult(STATUS.GM_NO_AUTHORITY_GET);
}
// console.log(self.app.get('serverId')); // console.log(self.app.get('serverId'));
await session.abind(user.username); await session.abind(user.username);
session.set('uid', user.uid); session.set('uid', user.uid);
session.set('roleId', user.username); session.set('roleId', user.username);
session.set('roleName', user.name); session.set('roleName', user.name);
session.set('groupId', user.groupId);
session.set('eventStatus', 0); session.set('eventStatus', 0);
session.set('sid', self.app.get('serverId')); session.set('sid', self.app.get('serverId'));
session.push('uid', () => { }); session.push('uid', () => { });
session.push('sid', () => { }); session.push('sid', () => { });
session.push('roleId', () => { }); session.push('roleId', () => { });
session.push('roleName', () => { }); session.push('roleName', () => { });
session.push('groupId', () => { });
session.push('eventStatus', () => { }); session.push('eventStatus', () => { });
// session.push('rid', function (err) { // session.push('rid', function (err) {
// if (err) { // if (err) {
@@ -267,7 +272,6 @@ export class EntryHandler {
// put user into channel // put user into channel
return resResult(STATUS.SUCCESS, { return resResult(STATUS.SUCCESS, {
serverType: this.app.get('serverName'),
env: this.app.get('env') env: this.app.get('env')
}); });
} }
@@ -2,7 +2,6 @@ import {Application, RouteRecord, FrontendOrBackendSession, HandlerCallback } fr
import { GM_API_TYPE, STATUS } from "../../../consts"; import { GM_API_TYPE, STATUS } from "../../../consts";
import { GMGroupModel } from "../../../db/GMGroup"; import { GMGroupModel } from "../../../db/GMGroup";
import { GMRecordModel } from "../../../db/GMRecord"; import { GMRecordModel } from "../../../db/GMRecord";
import { GMUserGroupModel } from "../../../db/GMUserGroup";
import { gameData } from "../../../pubUtils/data"; import { gameData } from "../../../pubUtils/data";
import { resResult } from "../../../pubUtils/util"; import { resResult } from "../../../pubUtils/util";
@@ -16,17 +15,15 @@ var Filter = function(this: any, app: Application) {
Filter.prototype.before = async function (routeRecord: RouteRecord, msg: any, session: FrontendOrBackendSession, next: HandlerCallback) { Filter.prototype.before = async function (routeRecord: RouteRecord, msg: any, session: FrontendOrBackendSession, next: HandlerCallback) {
const uid = session.get('uid'); const uid = session.get('uid');
const groupId = session.get('groupId');
let route = routeRecord.route; let route = routeRecord.route;
console.log('********uid', uid, route); console.log('********uid', uid, route);
let dicApi = gameData.apiByUrl.get(route); let dicApi = gameData.apiByUrl.get(route);
if(!dicApi) { if(!dicApi) {
return next(new Error(), resResult(STATUS.GM_MISS_API)); return next(new Error(), resResult(STATUS.GM_MISS_API));
} }
let userGroup = await GMUserGroupModel.getUserGroupByUid(uid); let group = await GMGroupModel.getGroupById(groupId);
if(!userGroup) {
return next(new Error(), resResult(STATUS.GM_NO_AUTHORITY_GET));
}
let group = await GMGroupModel.getGroupById(userGroup.groupId);
if(!group) { if(!group) {
return next(new Error(), resResult(STATUS.GM_NO_AUTHORITY_GET)); return next(new Error(), resResult(STATUS.GM_NO_AUTHORITY_GET));
-34
View File
@@ -1,34 +0,0 @@
module.exports = {
'development': {
'type': 'development',
'name': '本地服'
},
'stable': {
'type': 'stable',
'name': '正式服'
},
'alpha': {
'type': 'alpha',
'name': '测试服'
},
'dev': {
'type': 'dev',
'name': '开发服'
},
'isbn': {
'type': 'isbn',
'name': '版号服'
},
'monitor': {
'type': 'monitor',
'name': '监控服'
},
'distribute': {
'type': 'distribute',
'name': '分布式测试'
},
'sq1': {
'type': 'sq1',
'name': '1月功能测试'
}
};
+2 -1
View File
@@ -16,7 +16,8 @@ export default class ActivityController extends Controller {
public async getActivityGroupList() { public async getActivityGroupList() {
const { ctx } = this; const { ctx } = this;
const { page, pageSize, form: { serverId, current, groupId} } = ctx.request.body; console.log('******', ctx.request.body);
const { page, pageSize, form: { serverId, current, groupId} = { serverId: 0, current: false, groupId: 0 } } = ctx.request.body;
ctx.body = await ctx.service.activity.getActivityGroupList(page, pageSize, serverId, current, groupId); ctx.body = await ctx.service.activity.getActivityGroupList(page, pageSize, serverId, current, groupId);
return return
} }
+2 -8
View File
@@ -1,5 +1,4 @@
import { GMUserModel } from '@db/GMUser'; import { GMUserModel } from '@db/GMUser';
import { GMUserGroupModel } from '@db/GMUserGroup'
import { GMGroupModel } from '@db/GMGroup' import { GMGroupModel } from '@db/GMGroup'
import { GMRecordModel } from '@db/GMRecord' import { GMRecordModel } from '@db/GMRecord'
import { GM_API_TYPE, STATUS } from '@consts'; import { GM_API_TYPE, STATUS } from '@consts';
@@ -25,14 +24,9 @@ module.exports = () => {
ctx.body = ctx.service.utils.resResult(STATUS.GM_MISS_API); ctx.body = ctx.service.utils.resResult(STATUS.GM_MISS_API);
return; return;
} }
let userGroup = await GMUserGroupModel.getUserGroupByUid(user.uid); let group = await GMGroupModel.getGroupById(user.groupId);
if(!userGroup) {
ctx.body = ctx.service.utils.resResult(STATUS.GM_NO_AUTHORITY_GET);
return
}
let group = await GMGroupModel.getGroupById(userGroup.groupId);
if(!group) { if(!group || !user.isEnable) {
ctx.body = ctx.service.utils.resResult(STATUS.GM_NO_AUTHORITY_GET); ctx.body = ctx.service.utils.resResult(STATUS.GM_NO_AUTHORITY_GET);
return return
} }
+7 -2
View File
@@ -26,8 +26,13 @@ export default class Game extends Service {
public async getRegions() { public async getRegions() {
const { ctx } = this; const { ctx } = this;
let user = ctx.user;
const list = await RegionModel.getAllRegion(); let list = [];
if(user.envs.indexOf('all') != -1) {
list = await RegionModel.getAllRegion();
} else {
list = await RegionModel.findRegionByEnvs(user.envs||[]);
}
return ctx.service.utils.resResult(STATUS.SUCCESS, { return ctx.service.utils.resResult(STATUS.SUCCESS, {
list list
}); });
+20 -24
View File
@@ -1,6 +1,5 @@
import { GMUserModel } from '@db/GMUser'; import { GMUserModel } from '@db/GMUser';
import { GMGroupModel } from '@db/GMGroup'; import { GMGroupModel } from '@db/GMGroup';
import { GMUserGroupModel } from '@db/GMUserGroup';
import { Service } from 'egg'; import { Service } from 'egg';
import { STATUS } from '@consts'; import { STATUS } from '@consts';
import { gameData } from '@pubUtils/data'; import { gameData } from '@pubUtils/data';
@@ -24,17 +23,19 @@ export default class GMUsers extends Service {
if(!user) { if(!user) {
return ctx.service.utils.resResult(STATUS.GM_ERR_PASSWORD); return ctx.service.utils.resResult(STATUS.GM_ERR_PASSWORD);
} }
let userGroup = await GMUserGroupModel.getUserGroupByUid(user.uid); if(!user.isEnable) {
let group = new Array(); return ctx.service.utils.resResult(STATUS.GM_NO_AUTHORITY_GET);
if(userGroup) { }
let g = await GMGroupModel.getGroupById(userGroup.groupId); let group = new Array();
if(g) group.push(g.group); if(user.groupId != undefined) {
} let g = await GMGroupModel.getGroupById(user.groupId);
console.log('******', group, token) if(g) group.push(g.group);
}
return ctx.service.utils.resResult(STATUS.SUCCESS, { console.log('******', group, token)
...user, group, token
}); return ctx.service.utils.resResult(STATUS.SUCCESS, {
...user, group, token
});
}catch(e) { }catch(e) {
console.log(e) console.log(e)
} }
@@ -43,10 +44,9 @@ export default class GMUsers extends Service {
public async currentUser() { public async currentUser() {
const {ctx} = this; const {ctx} = this;
let user = ctx.user; let user = ctx.user;
let userGroup = await GMUserGroupModel.getUserGroupByUid(user.uid);
let group = new Array(); let group = new Array();
if(userGroup) { if(user.groupId != undefined) {
let g = await GMGroupModel.getGroupById(userGroup.groupId); let g = await GMGroupModel.getGroupById(user.groupId);
if(g) group.push(g.group); if(g) group.push(g.group);
} }
@@ -77,15 +77,12 @@ export default class GMUsers extends Service {
if(list) { if(list) {
let result = new Array(); let result = new Array();
for(let user of list) { for(let user of list) {
let uid = user.uid;
let userGroup = await GMUserGroupModel.getUserGroupByUid(uid);
let groupId = 0, groupStr = '暂无', envs = []; let groupId = 0, groupStr = '暂无', envs = [];
if(userGroup) { if(user.groupId != undefined) {
let group = await GMGroupModel.getGroupById(userGroup.groupId); let group = await GMGroupModel.getGroupById(user.groupId);
console.log(userGroup.groupId, group);
if(group) { if(group) {
groupId = userGroup.groupId; groupId = user.groupId;
envs = userGroup.envs envs = user.envs
groupStr = group.name; groupStr = group.name;
} }
} }
@@ -200,8 +197,7 @@ export default class GMUsers extends Service {
* 用户组添加接口 * 用户组添加接口
*/ */
public async saveGmGroupToUser(uid: number, groupId: number, envs: string[]) { public async saveGmGroupToUser(uid: number, groupId: number, envs: string[]) {
await GMUserModel.updateInfo(uid, { groupId, envs });
await GMUserGroupModel.addUserGroup(uid, groupId, envs);
return this.ctx.service.utils.resResult(STATUS.SUCCESS); return this.ctx.service.utils.resResult(STATUS.SUCCESS);
} }
+20 -5
View File
@@ -21,6 +21,15 @@ export default class GMUser extends BaseModel {
@prop({ required: true }) @prop({ required: true })
username: string; username: string;
@prop({ required: true })
groupId: number;
@prop({ required: true, type: String })
envs: string[];
@prop({ required: true, default: true })
isEnable: boolean;
@prop({ required: true }) @prop({ required: true })
password: string; password: string;
@@ -30,6 +39,11 @@ export default class GMUser extends BaseModel {
@prop({ required: true }) @prop({ required: true })
token: string; token: string;
public static async updateInfo(uid: number, params: GMUserUpdate) {
let user = await GMUserModel.findOneAndUpdate({ uid }, params, { new: true }).lean();
return user;
}
private static async encryptPass(password: string, salt?: string) { private static async encryptPass(password: string, salt?: string) {
if (!salt) { if (!salt) {
salt = await bcrypt.genSalt(SALT_WORK_FACTOR); salt = await bcrypt.genSalt(SALT_WORK_FACTOR);
@@ -39,23 +53,23 @@ export default class GMUser extends BaseModel {
} }
public static async getGmAccountList(lean = true) { public static async getGmAccountList(lean = true) {
const user: GMUserType[] = await GMUserModel.find().select('uid username name token').lean(lean); const user: GMUserType[] = await GMUserModel.find().select('uid username name token envs groupId isEnable').lean(lean);
return user; return user;
} }
public static async getGmAccountByToken(token: string, lean = true) { public static async getGmAccountByToken(token: string, lean = true) {
// console.log(token) // console.log(token)
const user: GMUserType = await GMUserModel.findOne({ token }).select('uid username name token').lean(lean); const user: GMUserType = await GMUserModel.findOne({ token }).select('uid username name token envs groupId isEnable').lean(lean);
return user; return user;
} }
public static async getGmAccountByUid(uid: number, lean = true) { public static async getGmAccountByUid(uid: number, lean = true) {
const user: GMUserType = await GMUserModel.findOne({ uid }).select('uid username name token').lean(lean); const user: GMUserType = await GMUserModel.findOne({ uid }).select('uid username name token envs groupId isEnable').lean(lean);
return user; return user;
} }
public static async getGmAccountByUsername(username: string, lean = true) { public static async getGmAccountByUsername(username: string, lean = true) {
const user: GMUserType = await GMUserModel.findOne({ username }).select('uid username name token').lean(lean); const user: GMUserType = await GMUserModel.findOne({ username }).select('uid username name token envs groupId isEnable').lean(lean);
return user; return user;
} }
@@ -64,7 +78,7 @@ export default class GMUser extends BaseModel {
if (user) { if (user) {
let { salt } = user; let { salt } = user;
let { npassword } = await this.encryptPass(password, salt); let { npassword } = await this.encryptPass(password, salt);
const checkUser: GMUserType = await GMUserModel.findOneAndUpdate({ username, password: npassword }, { token }).select('uid username name token').lean(lean); const checkUser: GMUserType = await GMUserModel.findOneAndUpdate({ username, password: npassword }, { token }).select('uid username name token envs groupId isEnable').lean(lean);
return checkUser; return checkUser;
} else { } else {
return null return null
@@ -93,3 +107,4 @@ export function loadGMUserModel(connect: mongoose.Connection) {
} }
export interface GMUserType extends Pick<DocumentType<GMUser>, keyof GMUser> { }; export interface GMUserType extends Pick<DocumentType<GMUser>, keyof GMUser> { };
export type GMUserUpdate = Partial<GMUserType>; // 将所有字段变成可选项
-43
View File
@@ -1,43 +0,0 @@
import BaseModel from './BaseModel';
import { index, getModelForClass, prop, DocumentType, ReturnModelType, mongoose } from '@typegoose/typegoose';
/**
* GM账号和用户组关系接口
*/
@index({ uid: 1, groupId: 1 })
@index({ uid: 1, env: 1 })
export default class GMUserGroup extends BaseModel {
@prop({ required: true })
uid: number;
@prop({ required: true, type: String })
envs: string[];
@prop({ required: true })
groupId: number;
public static async getUserGroupByUid(uid: number) {
const user: GMUserGroupType = await GMUserGroupModel.findOne({ uid }).lean();
return user;
}
public static async removeUserGroup(uid: number, groups: Array<number>) {
const user = await GMUserGroupModel.deleteMany({uid, groupId: {$in: groups}});
return user;
}
public static async addUserGroup(uid: number, groupId: number, envs: string[]) {
const result: GMUserGroupType = await GMUserGroupModel.findOneAndUpdate({uid}, { envs, groupId }, {new:true, upsert:true}).lean();
return result;
}
}
export let GMUserGroupModel: ReturnModelType<typeof GMUserGroup, {}>;
export function loadGMUserGroupModel(connect: mongoose.Connection) {
GMUserGroupModel = getModelForClass(GMUserGroup, {
existingConnection: connect
});
}
export interface GMUserGroupType extends Pick<DocumentType<GMUserGroup>, keyof GMUserGroup>{};
+5
View File
@@ -81,6 +81,11 @@ export default class Region extends BaseModel {
const rec: RegionType = await RegionModel.findOne({ env }).select('-_id').lean(); const rec: RegionType = await RegionModel.findOne({ env }).select('-_id').lean();
return rec; return rec;
} }
public static async findRegionByEnvs(envs: string[]) {
const rec: RegionType[] = await RegionModel.find({ env: { $in: envs } }).select('-_id').lean();
return rec;
}
} }
export let RegionModel: ReturnModelType<typeof Region, {}>; export let RegionModel: ReturnModelType<typeof Region, {}>;
-2
View File
@@ -2,7 +2,6 @@ import { mongoose } from "@typegoose/typegoose";
import { loadGMGroupModel } from "./GMGroup"; import { loadGMGroupModel } from "./GMGroup";
import { loadGMRecordModel } from "./GMRecord"; import { loadGMRecordModel } from "./GMRecord";
import { loadGMUserModel } from './GMUser' import { loadGMUserModel } from './GMUser'
import { loadGMUserGroupModel } from "./GMUserGroup";
import { loadRegionModel } from "./Region"; import { loadRegionModel } from "./Region";
import { loadServerlistModel } from "./Serverlist"; import { loadServerlistModel } from "./Serverlist";
import { loadGMMailModel } from './GMMail'; import { loadGMMailModel } from './GMMail';
@@ -13,7 +12,6 @@ export function loadGmDb(connect: mongoose.Connection) {
// console.log('************') // console.log('************')
loadGMGroupModel(connect); loadGMGroupModel(connect);
loadGMUserModel(connect); loadGMUserModel(connect);
loadGMUserGroupModel(connect);
loadGMRecordModel(connect); loadGMRecordModel(connect);
loadRegionModel(connect); loadRegionModel(connect);
loadServerlistModel(connect); loadServerlistModel(connect);
+3 -5
View File
@@ -1,5 +1,4 @@
import { GMUserModel } from '@db/GMUser'; import { GMUserModel } from '@db/GMUser';
import { GMUserGroupModel } from '@db/GMUserGroup'
import { GMGroupModel } from '@db/GMGroup' import { GMGroupModel } from '@db/GMGroup'
import { GMRecordModel } from '@db/GMRecord' import { GMRecordModel } from '@db/GMRecord'
import { GM_API_TYPE, STATUS } from '@consts'; import { GM_API_TYPE, STATUS } from '@consts';
@@ -25,14 +24,13 @@ module.exports = () => {
ctx.body = ctx.service.utils.resResult(STATUS.GM_MISS_API); ctx.body = ctx.service.utils.resResult(STATUS.GM_MISS_API);
return; return;
} }
let userGroup = await GMUserGroupModel.getUserGroupByUid(user.uid); if(user.groupId == undefined) {
if(!userGroup) {
ctx.body = ctx.service.utils.resResult(STATUS.GM_NO_AUTHORITY_GET); ctx.body = ctx.service.utils.resResult(STATUS.GM_NO_AUTHORITY_GET);
return return
} }
let group = await GMGroupModel.getGroupById(userGroup.groupId); let group = await GMGroupModel.getGroupById(user.groupId);
if(!group) { if(!group || !user.isEnable) {
ctx.body = ctx.service.utils.resResult(STATUS.GM_NO_AUTHORITY_GET); ctx.body = ctx.service.utils.resResult(STATUS.GM_NO_AUTHORITY_GET);
return return
} }