diff --git a/game-server/app.ts b/game-server/app.ts index 3bb8a5124..8d01ed0f6 100644 --- a/game-server/app.ts +++ b/game-server/app.ts @@ -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); diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index 93cd6529f..e557f1166 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -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') }); } diff --git a/game-server/app/servers/gm/filter/tokenFilter.ts b/game-server/app/servers/gm/filter/tokenFilter.ts index 4b86f6d10..0cfa29fd9 100644 --- a/game-server/app/servers/gm/filter/tokenFilter.ts +++ b/game-server/app/servers/gm/filter/tokenFilter.ts @@ -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)); diff --git a/game-server/config/serverName.ts b/game-server/config/serverName.ts deleted file mode 100644 index 8653503f8..000000000 --- a/game-server/config/serverName.ts +++ /dev/null @@ -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月功能测试' - } -}; \ No newline at end of file diff --git a/gm-server/app/controller/activity.ts b/gm-server/app/controller/activity.ts index 33d92bc60..9f93d8353 100644 --- a/gm-server/app/controller/activity.ts +++ b/gm-server/app/controller/activity.ts @@ -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 } diff --git a/gm-server/app/middleware/tokenParser.ts b/gm-server/app/middleware/tokenParser.ts index e556364e0..6db8a76db 100644 --- a/gm-server/app/middleware/tokenParser.ts +++ b/gm-server/app/middleware/tokenParser.ts @@ -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 } diff --git a/gm-server/app/service/Game.ts b/gm-server/app/service/Game.ts index 625cabb73..2e3d36765 100644 --- a/gm-server/app/service/Game.ts +++ b/gm-server/app/service/Game.ts @@ -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 }); diff --git a/gm-server/app/service/GmUser.ts b/gm-server/app/service/GmUser.ts index 2bd3a255d..901ab0458 100644 --- a/gm-server/app/service/GmUser.ts +++ b/gm-server/app/service/GmUser.ts @@ -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); } diff --git a/shared/db/GMUser.ts b/shared/db/GMUser.ts index 6ef38b177..a0ffc39d9 100644 --- a/shared/db/GMUser.ts +++ b/shared/db/GMUser.ts @@ -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, keyof GMUser> { }; +export type GMUserUpdate = Partial; // 将所有字段变成可选项 diff --git a/shared/db/GMUserGroup.ts b/shared/db/GMUserGroup.ts deleted file mode 100644 index c8f7d3c6d..000000000 --- a/shared/db/GMUserGroup.ts +++ /dev/null @@ -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) { - 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; -export function loadGMUserGroupModel(connect: mongoose.Connection) { - GMUserGroupModel = getModelForClass(GMUserGroup, { - existingConnection: connect - }); -} - -export interface GMUserGroupType extends Pick, keyof GMUserGroup>{}; \ No newline at end of file diff --git a/shared/db/Region.ts b/shared/db/Region.ts index 74eefbf68..def8bbf67 100644 --- a/shared/db/Region.ts +++ b/shared/db/Region.ts @@ -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; diff --git a/shared/db/index.ts b/shared/db/index.ts index e543e8f7e..a7a79789f 100644 --- a/shared/db/index.ts +++ b/shared/db/index.ts @@ -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); diff --git a/web-server/app/middleware/gmTokenParser.ts b/web-server/app/middleware/gmTokenParser.ts index 8ffbe2b70..a6346ad4a 100644 --- a/web-server/app/middleware/gmTokenParser.ts +++ b/web-server/app/middleware/gmTokenParser.ts @@ -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 }