调整权限验证

This commit is contained in:
yulixing 2019-08-19 16:55:28 +08:00
parent b34c2d3df2
commit fb213adac5
20 changed files with 76 additions and 292 deletions

View File

@ -1,116 +1,117 @@
import { Router } from 'express'; import {Router} from 'express'
import data from '../../../config/china_area'; import data from '../../../config/china_area'
import ChinaRegion from '../../models/snoopy/ChinaRegion'; import ChinaRegion from '../../models/snoopy/ChinaRegion'
import ChinaArea from '../../models/snoopy/ChinaArea'; import ChinaArea from '../../models/snoopy/ChinaArea'
import GameShareImage from '../../models/snoopy/GameShareImage'; import getGameShareImage from '../../models/snoopy/GameShareImage'
import logger from '../../utils/logger' import logger from '../../utils/logger'
const router = new Router(); const GameShareImage = getGameShareImage()
const router = new Router()
/* 获取省市列表, id为地区英文名*/ /* 获取省市列表, id为地区英文名*/
router.get('/china_region', async (req, res, next) => { router.get('/china_region', async (req, res, next) => {
try { try {
const provinces = await ChinaRegion.find({ level: 1 }); const provinces = await ChinaRegion.find({level: 1})
const citys = await ChinaRegion.find({ level: 2, pinyin: { $ne: null } }); const citys = await ChinaRegion.find({level: 2, pinyin: {$ne: null}})
const result = []; const result = []
const map = new Map(); const map = new Map()
const pIdx = {}; const pIdx = {}
for (let i = 0; i < provinces.length; i++) { for (let i = 0; i < provinces.length; i++) {
result.push({ result.push({
id: provinces[i].pinyin, id: provinces[i].pinyin,
parent: '#', parent: '#',
text: provinces[i].name, text: provinces[i].name,
children: [] children: [],
}); })
map.set(provinces[i]._id, provinces[i]); map.set(provinces[i]._id, provinces[i])
if (!pIdx[provinces[i]._id]) { if (!pIdx[provinces[i]._id]) {
pIdx[provinces[i]._id] = i; pIdx[provinces[i]._id] = i
} }
} }
for (const c of citys) { for (const c of citys) {
if (map.has(c.parent_id)) { if (map.has(c.parent_id)) {
const pIndex = pIdx[c.parent_id]; const pIndex = pIdx[c.parent_id]
result[pIndex].children.push({ result[pIndex].children.push({
id: `${map.get(c.parent_id).pinyin}_${c.pinyin}`, id: `${map.get(c.parent_id).pinyin}_${c.pinyin}`,
parent: map.get(c.parent_id).pinyin, parent: map.get(c.parent_id).pinyin,
text: c.name text: c.name,
}); })
} }
} }
res.json({ res.json({
errcode: 0, errcode: 0,
records: result records: result,
}); })
} catch (err) { } catch (err) {
next(err); next(err)
} }
}); })
/* 获取所有定义好的地域列表*/ /* 获取所有定义好的地域列表*/
router.get('/china_area', async (req, res, next) => { router.get('/china_area', async (req, res, next) => {
try { try {
const records = await ChinaArea.find({ deleted: false }); const records = await ChinaArea.find({deleted: false})
res.json({ errcode: 0, records: records }); res.json({errcode: 0, records: records})
} catch (err) { } catch (err) {
next(err); next(err)
} }
}); })
/* 更新*/ /* 更新*/
router.post('/china_area', async (req, res, next) => { router.post('/china_area', async (req, res, next) => {
logger.db(req, '公共', '地域', '保存地域'); logger.db(req, '公共', '地域', '保存地域')
const body = req.body; const body = req.body
const id = body.id; const id = body.id
const name = body.name; const name = body.name
const locations = body.locations; const locations = body.locations
let record; let record
try { try {
if (id) { if (id) {
record = await ChinaArea.findById(id); record = await ChinaArea.findById(id)
} else { } else {
record = new ChinaArea({}); record = new ChinaArea({})
} }
record.name = name; record.name = name
record.locations = locations; record.locations = locations
await record.save(); await record.save()
res.json({ errcode: 0, record: record }); res.json({errcode: 0, record: record})
} catch (err) { } catch (err) {
next(err); next(err)
} }
}); })
/* 删除*/ /* 删除*/
router.delete('/china_area', async (req, res, next) => { router.delete('/china_area', async (req, res, next) => {
logger.db(req, '公共', '地域', '删除地域'); logger.db(req, '公共', '地域', '删除地域')
const body = req.body; const body = req.body
const id = body.id; const id = body.id
try { try {
if (!id) { if (!id) {
return res.json({ errcode: 101, errmsg: '未定义要删除的地域id' }); return res.json({errcode: 101, errmsg: '未定义要删除的地域id'})
} }
const record = await ChinaArea.findById(id); const record = await ChinaArea.findById(id)
if (!record) { if (!record) {
return res.json({ errcode: 102, errmsg: '未找到要删除的地域' }); return res.json({errcode: 102, errmsg: '未找到要删除的地域'})
} }
const usedRecord = await GameShareImage.findOne({ const usedRecord = await GameShareImage.findOne({
area: id, area: id,
deleted: false deleted: false,
}); })
if (usedRecord) { if (usedRecord) {
return res.json({ return res.json({
errcode: 103, errcode: 103,
errmsg: '要删除的记录已被使用,不能删除!' errmsg: '要删除的记录已被使用,不能删除!',
}); })
} }
record.deleted = true; record.deleted = true
record.delete_time = new Date(); record.delete_time = new Date()
await record.save(); await record.save()
res.json({ errcode: 0, record: record }); res.json({errcode: 0, record: record})
} catch (err) { } catch (err) {
next(err); next(err)
} }
}); })
export default router; export default router

View File

@ -1,231 +0,0 @@
// 获取单个游戏广告位
import {Router} from 'express'
import axios from 'axios'
import config from '../../../config/config'
const router = new Router()
const gameReportApiUrl = config.game_report
// 获取游戏日报
router.get('/report', async (req, res, next) => {
// 权限判断
const hasPerm =
req.user.permissions.includes(`${req.query.uid}-readable`) ||
req.user.permissions.includes(`${req.query.uid}-edit`) ||
req.user.permissions.includes(`${req.query.uid}-publish`) ||
req.user.permissions.includes(`games-writeable`)
if (!hasPerm) {
res.status(403).send({
errcode: 1,
errmsg: '用户无此游戏数据查看权限!',
})
return
}
const query = req.query
const game_id = parseInt(query.game_id)
const platform_id = parseInt(query.platform_id)
const date = query.date
const isNew = parseInt(query.isNew)
try {
const categoryRes = await axios({
url: gameReportApiUrl,
method: 'get',
params: {
c: 'Ops',
a: 'descField',
body: JSON.stringify({
gameid: game_id,
channel: platform_id,
}),
},
})
if (categoryRes.data.errcode === 0) {
const categoryInfo = categoryRes.data.result
const category = []
for (const key in categoryInfo) {
if (categoryInfo.hasOwnProperty(key)) {
category.push(key)
}
}
if (category.length === 0) {
res.send({
errcode: 404,
errmsg: '暂无数据!',
})
return
}
const getDataArr = []
category.map(item => {
getDataArr.push(
getCategoryData(item, date, isNew, game_id, platform_id)
)
})
const dataArr = await Promise.all(getDataArr)
const allData = Object.assign(...dataArr)
const result = {}
for (const key in categoryInfo) {
if (categoryInfo.hasOwnProperty(key)) {
const cate = categoryInfo[key]
result[key] = []
for (let i = 0; i < cate.length; i++) {
const field = cate[i]
const fieldName = field.name
if (fieldName.endsWith('_%')) {
let idx = 1
let tempName = fieldName.replace(/%/, idx)
while (allData[tempName]) {
const obj = JSON.parse(JSON.stringify(field))
obj.name = tempName
obj.explan += `_${idx}`
obj.value = allData[tempName]
result[key].push(obj)
idx++
tempName = fieldName.replace(/%/, idx)
}
} else {
field.value = allData[fieldName]
result[key].push(field)
}
}
}
}
res.send({
errcode: 0,
result: result,
})
} else {
res.send({
errcode: categoryRes.errcode,
errmsg: categoryRes.errmsg,
})
return
}
} catch (err) {
next(err)
}
})
function getCategoryData(cateName, date, is_new, game_id, platform_id) {
return new Promise(async (resolve, reject) => {
const dataRes = await axios({
url: gameReportApiUrl,
method: 'get',
params: {
c: 'Ops',
a: 'gameReport',
body: JSON.stringify({
gameid: game_id,
channel: platform_id,
times: date,
is_new: is_new,
category: cateName,
}),
},
})
if (dataRes.data.errcode === 0) {
const data = dataRes.data.result
resolve(data)
} else {
reject({
errcode: 404,
errmsg: '数据获取失败,暂无数据!',
})
}
})
}
// 获取游戏数据(画图表用)
router.get('/game-data', async (req, res, next) => {
// 权限判断
const hasPerm =
req.user.permissions.includes(`${req.query.uid}-readable`) ||
req.user.permissions.includes(`${req.query.uid}-edit`) ||
req.user.permissions.includes(`${req.query.uid}-publish`) ||
req.user.permissions.includes(`games-writeable`)
if (!hasPerm) {
res.status(403).send({
errcode: 1,
errmsg: '用户无此游戏数据查看权限!',
})
return
}
const query = req.query
console.log(query)
const gameid = parseInt(query.gameid)
const channelid = parseInt(query.channelid)
const ad_channelid = query.ad_channelid
const method = query.method
const time_partice = parseInt(query.time_partice)
const time_begin = query.isNew
const time_end = query.isNew
try {
// TODO: 接口对接
// const searchRes = await axios({
// url: gameReportApiUrl,
// method: 'get',
// params: {
// c: 'Ops',
// a: 'descField',
// body: JSON.stringify({
// gameid: game_id,
// channel: platform_id,
// }),
// },
// })
// if (searchRes.data.errcode === 0) {
// res.send({
// errcode: 0,
// errmsg: '',
// message: {
// totoal: 2,
// result: [
// {
// '2019-08-01 01:00:00': 100,
// '2019-08-01 02:00:00': 120,
// },
// ],
// },
// })
// } else {
// res.send({
// errcode: searchRes.errcode,
// errmsg: searchRes.errmsg,
// })
// }
// TODO: 数据示例
res.send({
errcode: 0,
errmsg: '',
message: {
totoal: 2,
result: [
{
'2019-08-01 01:00:00': 100,
'2019-08-01 02:00:00': 120,
},
],
},
})
} catch (err) {
next(err)
}
})
export default router

View File

@ -1,10 +1,9 @@
// 获取单个游戏广告位 // 获取单个游戏广告位
import {Router} from 'express' import {Router} from 'express'
import axios from 'axios' import axios from 'axios'
import GameItem from '../../models/admin/GameItem' import GameItem from '../../models/admin/GameItem'
import config from '../../../config/config' import config from '../../../config/config'
import validPerm from '../../utils/valid-perm'
const router = new Router() const router = new Router()

View File

@ -4,6 +4,7 @@ import axios from 'axios'
import config from '../../../config/config' import config from '../../../config/config'
import logger from '../../utils/logger' import logger from '../../utils/logger'
import getOpsToken from '../../utils/get-ops-token' import getOpsToken from '../../utils/get-ops-token'
import validPerm from '../../utils/valid-perm'
const router = new Router() const router = new Router()

View File

@ -14,7 +14,6 @@ const GameInfo = getGameInfoModel()
const GameInfoTest = getGameInfoModel('test') const GameInfoTest = getGameInfoModel('test')
// 获取游戏列表 // 获取游戏列表
// TODO: 整理接口返回数据
router.get('/list', async (req, res, next) => { router.get('/list', async (req, res, next) => {
const query = req.query || {} const query = req.query || {}
const userPerms = req.user.permissions const userPerms = req.user.permissions

View File

@ -2,6 +2,7 @@ import {Router} from 'express'
import axios from 'axios' import axios from 'axios'
import logger from '../../utils/logger' import logger from '../../utils/logger'
import GameItem from '../../models/admin/GameItem' import GameItem from '../../models/admin/GameItem'
import validPerm from '../../utils/valid-perm'
const router = new Router() const router = new Router()

View File

@ -1,6 +1,7 @@
import {Router} from 'express' import {Router} from 'express'
import logger from '../../utils/logger' import logger from '../../utils/logger'
import GameLib from '../../models/admin/GameLib' import GameLib from '../../models/admin/GameLib'
import validPerm from '../../utils/valid-perm'
const router = new Router() const router = new Router()

View File

@ -5,6 +5,7 @@ import path from 'path'
import painter from '../../utils/painter' import painter from '../../utils/painter'
import config from '../../../config/config' import config from '../../../config/config'
import Template from '../../models/mp_share/Template' import Template from '../../models/mp_share/Template'
import validPerm from '../../utils/valid-perm'
const router = new Router() const router = new Router()

View File

@ -1,6 +1,7 @@
import Platform from '../../models/admin/Platform' import Platform from '../../models/admin/Platform'
import {Router} from 'express' import {Router} from 'express'
import logger from '../../utils/logger' import logger from '../../utils/logger'
import validPerm from '../../utils/valid-perm'
const router = new Router() const router = new Router()
// 获取平台列表 // 获取平台列表

View File

@ -5,6 +5,7 @@ import RedisDao from '../../redis/redis.dao'
import getOpsToken from '../../utils/get-ops-token' import getOpsToken from '../../utils/get-ops-token'
import config from '../../../config/config' import config from '../../../config/config'
import axios from 'axios' import axios from 'axios'
import validPerm from '../../utils/valid-perm'
const router = new Router() const router = new Router()
const redisDao = new RedisDao() const redisDao = new RedisDao()

View File

@ -6,6 +6,7 @@ import {Router} from 'express'
import redis from 'redis' import redis from 'redis'
import config from '../../../config/config' import config from '../../../config/config'
import logger from '../../utils/logger' import logger from '../../utils/logger'
import validPerm from '../../utils/valid-perm'
const router = new Router() const router = new Router()
const redisDao = new RedisDao() const redisDao = new RedisDao()

View File

@ -4,6 +4,7 @@ import SystemDic from '../../models/admin/SystemDic'
import ChinaArea from '../../models/snoopy/ChinaArea' import ChinaArea from '../../models/snoopy/ChinaArea'
import {Router} from 'express' import {Router} from 'express'
import logger from '../../utils/logger' import logger from '../../utils/logger'
import validPerm from '../../utils/valid-perm'
const router = new Router() const router = new Router()
const GameInfo = getGameInfoModel() const GameInfo = getGameInfoModel()
const GameInfoTest = getGameInfoModel('test') const GameInfoTest = getGameInfoModel('test')

View File

@ -2,7 +2,7 @@ import {Router} from 'express'
import path from 'path' import path from 'path'
import cors from 'cors' import cors from 'cors'
import Fontmin from 'fontmin' import Fontmin from 'fontmin'
import validPerm from '../../utils/valid-perm'
const router = new Router() const router = new Router()
const whitelist = ['https://servicewechat.com'] const whitelist = ['https://servicewechat.com']

View File

@ -2,8 +2,10 @@
import {Router} from 'express' import {Router} from 'express'
import getGameInfoModel from '../../models/admin/GameInfo' import getGameInfoModel from '../../models/admin/GameInfo'
import validPerm from '../../utils/valid-perm'
const GameInfo = getGameInfoModel() const GameInfo = getGameInfoModel()
import cors from 'cors' import cors from 'cors'
import {platform} from 'os' import {platform} from 'os'

View File

@ -3,6 +3,7 @@
import {Router} from 'express' import {Router} from 'express'
import AdArea from '../../models/admin/AdArea' import AdArea from '../../models/admin/AdArea'
import AdUid from '../../models/admin/AdUid' import AdUid from '../../models/admin/AdUid'
import validPerm from '../../utils/valid-perm'
import cors from 'cors' import cors from 'cors'
const router = new Router() const router = new Router()

View File

@ -1,6 +1,7 @@
import OpLog from '../../models/admin/OpLog'; import OpLog from '../../models/admin/OpLog';
import { Router } from 'express'; import { Router } from 'express';
import logger from '../../utils/logger'; import logger from '../../utils/logger';
import validPerm from '../../utils/valid-perm'
const router = new Router(); const router = new Router();
router.get('/', async function permissionListCtrl(req, res, next) { router.get('/', async function permissionListCtrl(req, res, next) {

View File

@ -1,6 +1,7 @@
import {Role} from '../../models/admin/User' import {Role} from '../../models/admin/User'
import {Router} from 'express' import {Router} from 'express'
import logger from '../../utils/logger' import logger from '../../utils/logger'
import validPerm from '../../utils/valid-perm'
const router = new Router() const router = new Router()
router.get('/', async function permissionListCtrl(req, res, next) { router.get('/', async function permissionListCtrl(req, res, next) {

View File

@ -4,6 +4,7 @@ import {User, LdapUser} from '../../models/admin/User'
import {combPer, combRole} from '../../utils/comb-permissions' import {combPer, combRole} from '../../utils/comb-permissions'
import {Router} from 'express' import {Router} from 'express'
import logger from '../../utils/logger' import logger from '../../utils/logger'
import validPerm from '../../utils/valid-perm'
import getOpsToken from '../../utils/get-ops-token' import getOpsToken from '../../utils/get-ops-token'
const router = new Router() const router = new Router()

View File

@ -3,6 +3,7 @@ import {Router} from 'express'
import axios from 'axios' import axios from 'axios'
import config from '../../../config/config' import config from '../../../config/config'
import logger from '../../utils/logger' import logger from '../../utils/logger'
import validPerm from '../../utils/valid-perm'
import getOpsToken from '../../utils/get-ops-token' import getOpsToken from '../../utils/get-ops-token'
const router = new Router() const router = new Router()

View File

@ -4,6 +4,7 @@ import { LdapUser, User } from '../../models/admin/User';
import { combPer, combRole } from '../../utils/comb-permissions'; import { combPer, combRole } from '../../utils/comb-permissions';
import { Router } from 'express'; import { Router } from 'express';
import logger from '../../utils/logger'; import logger from '../../utils/logger';
import validPerm from '../../utils/valid-perm'
const router = new Router(); const router = new Router();
router.get('/info', function(req, res, next) { router.get('/info', function(req, res, next) {