From ab5fc549b311f279a16b426c7a77cb5a020b09dc Mon Sep 17 00:00:00 2001 From: yulixing Date: Tue, 28 May 2019 20:00:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/common/index.js | 4 +- src/controllers/common/minigame.js | 18 ++++ src/controllers/games/games.js | 129 ++++++++++++++++++++++++++++- src/controllers/sys/users.js | 37 +++++++++ src/controllers/user/index.js | 14 ++-- src/controllers/user/login.js | 2 +- src/middleware/permission.js | 1 + src/models/admin/GameInfo.js | 3 +- src/models/admin/OpLog.js | 31 +++++++ src/router/index.js | 4 +- 10 files changed, 230 insertions(+), 13 deletions(-) create mode 100644 src/controllers/common/minigame.js create mode 100644 src/models/admin/OpLog.js diff --git a/src/controllers/common/index.js b/src/controllers/common/index.js index 69dc9b2..6e48347 100644 --- a/src/controllers/common/index.js +++ b/src/controllers/common/index.js @@ -1,6 +1,7 @@ import { Router } from 'express'; import testCtrl from './test'; import uploadRouter from './upload' +import minigameRouter from './minigame' import permission from './../../middleware/permission'; const router = new Router(); @@ -8,6 +9,7 @@ const router = new Router(); // TODO: router.get('/test', permission, testCtrl); -router.use('/common', uploadRouter); +router.use('/', uploadRouter); +router.use('/', minigameRouter); export default router; diff --git a/src/controllers/common/minigame.js b/src/controllers/common/minigame.js new file mode 100644 index 0000000..104cd38 --- /dev/null +++ b/src/controllers/common/minigame.js @@ -0,0 +1,18 @@ +import { Router } from 'express'; + +const router = new Router(); +// 获取平台列表 +router.post('/minigame', async (req, res, next) => { + const body = req.body; + try { + console.log(body); + res.send({ + errcode: 0, + body + }); + } catch (err) { + next(err); + } +}); + +export default router; diff --git a/src/controllers/games/games.js b/src/controllers/games/games.js index 7c322f9..3c57f83 100644 --- a/src/controllers/games/games.js +++ b/src/controllers/games/games.js @@ -1,6 +1,7 @@ // import GameInfo from '../../models/snoopy/GameInfo'; import GameInfo from '../../models/admin/GameInfo'; import { Router } from 'express'; +import { userInfo } from 'os'; const router = new Router(); @@ -137,6 +138,45 @@ const router = new Router(); // } // }); +// TODO: 权限控制 + +// 获取游戏列表 +router.get('/list', async (req, res, next) => { + const query = req.query || {}; + const userPerms = req.user.permissions + console.log(req.query) + + try { + let search = []; + let result = []; + if (query.type === 'all') { + // 返回所有游戏信息(仅包含游戏_id与游戏名) + result = await GameInfo.find({ deleted: false }); + + + } else { + // TODO: 只返回有权限查阅的游戏 + search = await GameInfo.find({ deleted: false }); + result = search.filter(game => { + const uid = game._id + return userPerms.includes(`${uid}-readable`) || userPerms.includes(`${uid}-edit`) || userPerms.includes(`${uid}-publish`) + }) + } + + console.log(result) + + + res.send({ + errcode: 0, + gameList: result, + user: req.user + }); + } catch (err) { + next(err); + } +}); + +// 保存游戏信息 router.post('/save', async (req, res, next) => { const body = req.body; try { @@ -147,7 +187,7 @@ router.post('/save', async (req, res, next) => { { game_name_en: body.game_name_en } ] }); - if (search) { + if (search && !search.deleted) { res.send({ errcode: 1, errmsg: '游戏已存在!' @@ -155,9 +195,96 @@ router.post('/save', async (req, res, next) => { } else { const newGameInfo = new GameInfo(body); const result = await newGameInfo.save(); + console.log(result); + res.send({ + errcode: 0, + gameInfo: result + }); + } + } catch (err) { + next(err); + } +}); + +// 查找单个游戏信息 +router.get('/info', async (req, res, next) => { + const query = req.query; + try { + const search = await GameInfo.findOne({ + _id: query.uid, + deleted: false + }); + if (search) { + res.send({ + errcode: 0, + gameInfo: search + }); + } else { + res.send({ + errcode: 1, + errmsg: '游戏不存在或已删除!' + }); + } + } catch (err) { + next(err); + } +}); + +// 更新游戏信息 +router.post('/update', async (req, res, next) => { + const body = req.body; + + try { + const search = await GameInfo.findOne({ + _id: body._id, + deleted: false + }); + if (search) { + const result = await GameInfo.update( + { + _id: body._id, + deleted: false + }, + body + ); res.send({ errcode: 0 }); + } else { + res.send({ + errcode: 1, + errmsg: '游戏不存在或已删除!' + }); + } + } catch (err) { + next(err); + } +}); + +// 删除一个游戏 +router.post('/del', async (req, res, next) => { + const body = req.body; + try { + const search = await GameInfo.findOne({ + _id: body.uid, + deleted: false + }); + if (search) { + const result = await GameInfo.updateOne( + { + _id: body.uid, + deleted: false + }, + { deleted: true } + ); + res.send({ + errcode: 0 + }); + } else { + res.send({ + errcode: 1, + errmsg: '游戏不存在或已删除!' + }); } } catch (err) { next(err); diff --git a/src/controllers/sys/users.js b/src/controllers/sys/users.js index 8671828..9b0000a 100644 --- a/src/controllers/sys/users.js +++ b/src/controllers/sys/users.js @@ -110,4 +110,41 @@ router.post('/edit', async function userEditCtrl(req, res, next) { } }); +router.post('/save', async (req, res, next) => { + const body = req.body; + const dn = `cn=${body.fullname},ou=people,dc=kingsome,dc=cn`; + const entry = { + cn: body.fullname, + sn: body.fullname, + objectClass: [ + 'posixAccount', + 'inetOrgPerson', + 'organizationalPerson', + 'person' + ], + uid: body.username + }; + const client = ldap.createClient({ + url: config.ldap.url + }); + + try { + client.bind(config.ldap.user, config.ldap.password, function(err, bindRes) { + if (err) next(err); + client.add(dn, entry, function(err) { + if (err) console.log(err); + // res.send({ + // errcode: 0 + // }) + + + + + }); + }); + } catch (err) { + next(err); + } +}); + export default router; diff --git a/src/controllers/user/index.js b/src/controllers/user/index.js index 04b8f11..e45cd4f 100644 --- a/src/controllers/user/index.js +++ b/src/controllers/user/index.js @@ -1,13 +1,13 @@ import { Router } from 'express'; -import userInfoRouter from './info' -import loginRouter from './login' -import editRouter from './edit' - +import permission from '../../middleware/permission'; +import userInfoRouter from './info'; +import loginRouter from './login'; +import editRouter from './edit'; const router = new Router(); -router.use('/user', userInfoRouter) -router.use('/user', loginRouter) -router.use('/user', editRouter) +router.use('/user', loginRouter); +router.use('/user', permission, userInfoRouter); +router.use('/user', permission, editRouter); export default router; diff --git a/src/controllers/user/login.js b/src/controllers/user/login.js index c9555c3..3cbfedf 100644 --- a/src/controllers/user/login.js +++ b/src/controllers/user/login.js @@ -70,7 +70,7 @@ router.post('/login', function(req, res, next) { }, config.jwtSecret, { - expiresIn: 60 * 60 * 2 + expiresIn: 60 * 60 * 24 } ); try { diff --git a/src/middleware/permission.js b/src/middleware/permission.js index e36faad..26dfc25 100644 --- a/src/middleware/permission.js +++ b/src/middleware/permission.js @@ -46,6 +46,7 @@ export default function(req, res, next) { let permissions = [...searchResult.permissions]; permissions = combPer(permissions); const userInfo = JSON.parse(JSON.stringify(searchResult)); + userInfo.permissions = permissions req.user = userInfo; next(); } diff --git a/src/models/admin/GameInfo.js b/src/models/admin/GameInfo.js index d690c4c..bab9415 100644 --- a/src/models/admin/GameInfo.js +++ b/src/models/admin/GameInfo.js @@ -11,7 +11,8 @@ const GameInfo = new mongoose.Schema( game_id: { type: String }, game_type: { type: String }, game_icon: { type: String }, - platforms: [{type: Object}] + platforms: [{type: Object}], + deleted: {type: Boolean, default: false} }, { collection: 'game_info', diff --git a/src/models/admin/OpLog.js b/src/models/admin/OpLog.js new file mode 100644 index 0000000..176aadd --- /dev/null +++ b/src/models/admin/OpLog.js @@ -0,0 +1,31 @@ +'use strict'; +import mongoose from 'mongoose'; + +const Schema = mongoose.Schema; +const ObjectId = Schema.Types.ObjectId; +/** + * 操作日志 + */ +const OpLog = new mongoose.Schema({ + // 游戏id + admin: {type: ObjectId, ref: 'Admin'}, + username: {type: String}, + method: {type: String}, + show_name: {type: String}, + // 请求路径 + path: {type: String}, + user_agent: {type: String}, + referer: {type: String}, + // 请求的param + params: {type: Schema.Types.Mixed}, + // ip + ip: {type: String}, + // 备注 + comment: {type: String}, +}, { + collection: 'op_logs', + timestamps: true, +}); + +export default mongoose.model('OpLog', OpLog); + diff --git a/src/router/index.js b/src/router/index.js index 4ab8b51..dec6245 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -9,9 +9,9 @@ import gamesRouter from './../controllers/games'; const router = new Router(); // 公共接口 -router.use('/', commonRouter); +router.use('/common', permission,commonRouter); // 系统管理 -router.use('/sys', sysRouter); +router.use('/sys', permission,sysRouter); // 用户相关 router.use('/', userRouter); // 游戏列表