后台:修改权限用表

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

View File

@@ -63,10 +63,8 @@ app.set('name', 'zyz');
// 全局配置,对所有 env 所有 serverType 生效
app.configure(function () {
app.loadConfig('database', app.getBase() + '/config/database');
app.loadConfig('serverName', app.getBase() + '/config/serverName');
console.log('env:', app.get('env'));
console.log('db:', app.get('database'));
console.log('serverName:', app.get('serverName'))
initMongodb(app);
initGmMongodb(app);

View File

@@ -245,18 +245,23 @@ export class EntryHandler {
console.log('user token not found');
return resResult(STATUS.TOKEN_ERR);
}
if(!user.isEnable) {
return resResult(STATUS.GM_NO_AUTHORITY_GET);
}
// console.log(self.app.get('serverId'));
await session.abind(user.username);
session.set('uid', user.uid);
session.set('roleId', user.username);
session.set('roleName', user.name);
session.set('groupId', user.groupId);
session.set('eventStatus', 0);
session.set('sid', self.app.get('serverId'));
session.push('uid', () => { });
session.push('sid', () => { });
session.push('roleId', () => { });
session.push('roleName', () => { });
session.push('groupId', () => { });
session.push('eventStatus', () => { });
// session.push('rid', function (err) {
// if (err) {
@@ -267,7 +272,6 @@ export class EntryHandler {
// put user into channel
return resResult(STATUS.SUCCESS, {
serverType: this.app.get('serverName'),
env: this.app.get('env')
});
}

View File

@@ -2,7 +2,6 @@ import {Application, RouteRecord, FrontendOrBackendSession, HandlerCallback } fr
import { GM_API_TYPE, STATUS } from "../../../consts";
import { GMGroupModel } from "../../../db/GMGroup";
import { GMRecordModel } from "../../../db/GMRecord";
import { GMUserGroupModel } from "../../../db/GMUserGroup";
import { gameData } from "../../../pubUtils/data";
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) {
const uid = session.get('uid');
const groupId = session.get('groupId');
let route = routeRecord.route;
console.log('********uid', uid, route);
let dicApi = gameData.apiByUrl.get(route);
if(!dicApi) {
return next(new Error(), resResult(STATUS.GM_MISS_API));
}
let userGroup = await GMUserGroupModel.getUserGroupByUid(uid);
if(!userGroup) {
return next(new Error(), resResult(STATUS.GM_NO_AUTHORITY_GET));
}
let group = await GMGroupModel.getGroupById(userGroup.groupId);
let group = await GMGroupModel.getGroupById(groupId);
if(!group) {
return next(new Error(), resResult(STATUS.GM_NO_AUTHORITY_GET));

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月功能测试'
}
};

View File

@@ -16,7 +16,8 @@ export default class ActivityController extends Controller {
public async getActivityGroupList() {
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);
return
}

View File

@@ -1,5 +1,4 @@
import { GMUserModel } from '@db/GMUser';
import { GMUserGroupModel } from '@db/GMUserGroup'
import { GMGroupModel } from '@db/GMGroup'
import { GMRecordModel } from '@db/GMRecord'
import { GM_API_TYPE, STATUS } from '@consts';
@@ -25,14 +24,9 @@ module.exports = () => {
ctx.body = ctx.service.utils.resResult(STATUS.GM_MISS_API);
return;
}
let userGroup = await GMUserGroupModel.getUserGroupByUid(user.uid);
if(!userGroup) {
ctx.body = ctx.service.utils.resResult(STATUS.GM_NO_AUTHORITY_GET);
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);
return
}

View File

@@ -26,8 +26,13 @@ export default class Game extends Service {
public async getRegions() {
const { ctx } = this;
const list = await RegionModel.getAllRegion();
let user = ctx.user;
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, {
list
});

View File

@@ -1,6 +1,5 @@
import { GMUserModel } from '@db/GMUser';
import { GMGroupModel } from '@db/GMGroup';
import { GMUserGroupModel } from '@db/GMUserGroup';
import { Service } from 'egg';
import { STATUS } from '@consts';
import { gameData } from '@pubUtils/data';
@@ -24,17 +23,19 @@ export default class GMUsers extends Service {
if(!user) {
return ctx.service.utils.resResult(STATUS.GM_ERR_PASSWORD);
}
let userGroup = await GMUserGroupModel.getUserGroupByUid(user.uid);
let group = new Array();
if(userGroup) {
let g = await GMGroupModel.getGroupById(userGroup.groupId);
if(g) group.push(g.group);
}
console.log('******', group, token)
return ctx.service.utils.resResult(STATUS.SUCCESS, {
...user, group, token
});
if(!user.isEnable) {
return ctx.service.utils.resResult(STATUS.GM_NO_AUTHORITY_GET);
}
let group = new Array();
if(user.groupId != undefined) {
let g = await GMGroupModel.getGroupById(user.groupId);
if(g) group.push(g.group);
}
console.log('******', group, token)
return ctx.service.utils.resResult(STATUS.SUCCESS, {
...user, group, token
});
}catch(e) {
console.log(e)
}
@@ -43,10 +44,9 @@ export default class GMUsers extends Service {
public async currentUser() {
const {ctx} = this;
let user = ctx.user;
let userGroup = await GMUserGroupModel.getUserGroupByUid(user.uid);
let group = new Array();
if(userGroup) {
let g = await GMGroupModel.getGroupById(userGroup.groupId);
if(user.groupId != undefined) {
let g = await GMGroupModel.getGroupById(user.groupId);
if(g) group.push(g.group);
}
@@ -77,15 +77,12 @@ export default class GMUsers extends Service {
if(list) {
let result = new Array();
for(let user of list) {
let uid = user.uid;
let userGroup = await GMUserGroupModel.getUserGroupByUid(uid);
let groupId = 0, groupStr = '暂无', envs = [];
if(userGroup) {
let group = await GMGroupModel.getGroupById(userGroup.groupId);
console.log(userGroup.groupId, group);
if(user.groupId != undefined) {
let group = await GMGroupModel.getGroupById(user.groupId);
if(group) {
groupId = userGroup.groupId;
envs = userGroup.envs
groupId = user.groupId;
envs = user.envs
groupStr = group.name;
}
}
@@ -200,8 +197,7 @@ export default class GMUsers extends Service {
* 用户组添加接口
*/
public async saveGmGroupToUser(uid: number, groupId: number, envs: string[]) {
await GMUserGroupModel.addUserGroup(uid, groupId, envs);
await GMUserModel.updateInfo(uid, { groupId, envs });
return this.ctx.service.utils.resResult(STATUS.SUCCESS);
}

View File

@@ -21,6 +21,15 @@ export default class GMUser extends BaseModel {
@prop({ required: true })
username: string;
@prop({ required: true })
groupId: number;
@prop({ required: true, type: String })
envs: string[];
@prop({ required: true, default: true })
isEnable: boolean;
@prop({ required: true })
password: string;
@@ -30,6 +39,11 @@ export default class GMUser extends BaseModel {
@prop({ required: true })
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) {
if (!salt) {
salt = await bcrypt.genSalt(SALT_WORK_FACTOR);
@@ -39,23 +53,23 @@ export default class GMUser extends BaseModel {
}
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;
}
public static async getGmAccountByToken(token: string, lean = true) {
// 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;
}
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;
}
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;
}
@@ -64,7 +78,7 @@ export default class GMUser extends BaseModel {
if (user) {
let { salt } = user;
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;
} else {
return null
@@ -93,3 +107,4 @@ export function loadGMUserModel(connect: mongoose.Connection) {
}
export interface GMUserType extends Pick<DocumentType<GMUser>, keyof GMUser> { };
export type GMUserUpdate = Partial<GMUserType>; // 将所有字段变成可选项

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>{};

View File

@@ -81,6 +81,11 @@ export default class Region extends BaseModel {
const rec: RegionType = await RegionModel.findOne({ env }).select('-_id').lean();
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, {}>;

View File

@@ -2,7 +2,6 @@ import { mongoose } from "@typegoose/typegoose";
import { loadGMGroupModel } from "./GMGroup";
import { loadGMRecordModel } from "./GMRecord";
import { loadGMUserModel } from './GMUser'
import { loadGMUserGroupModel } from "./GMUserGroup";
import { loadRegionModel } from "./Region";
import { loadServerlistModel } from "./Serverlist";
import { loadGMMailModel } from './GMMail';
@@ -13,7 +12,6 @@ export function loadGmDb(connect: mongoose.Connection) {
// console.log('************')
loadGMGroupModel(connect);
loadGMUserModel(connect);
loadGMUserGroupModel(connect);
loadGMRecordModel(connect);
loadRegionModel(connect);
loadServerlistModel(connect);

View File

@@ -1,5 +1,4 @@
import { GMUserModel } from '@db/GMUser';
import { GMUserGroupModel } from '@db/GMUserGroup'
import { GMGroupModel } from '@db/GMGroup'
import { GMRecordModel } from '@db/GMRecord'
import { GM_API_TYPE, STATUS } from '@consts';
@@ -25,14 +24,13 @@ module.exports = () => {
ctx.body = ctx.service.utils.resResult(STATUS.GM_MISS_API);
return;
}
let userGroup = await GMUserGroupModel.getUserGroupByUid(user.uid);
if(!userGroup) {
if(user.groupId == undefined) {
ctx.body = ctx.service.utils.resResult(STATUS.GM_NO_AUTHORITY_GET);
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);
return
}