后台添加权限管理

This commit is contained in:
luying
2020-09-22 11:10:45 +08:00
parent bcbed5959f
commit 780562979e
13 changed files with 494 additions and 31 deletions
+49
View File
@@ -0,0 +1,49 @@
import { Controller } from 'egg';
export default class GmController extends Controller {
public async getGmList() {
const { ctx } = this;
ctx.body = await ctx.service.gmUser.getGmList();
}
public async createGmAccount() {
const { ctx } = this;
const {password, name, username} = ctx.request.body;
ctx.body = await ctx.service.gmUser.createGmAccount(name, username, password);
}
public async getApiList() {
const { ctx } = this;
ctx.body = await ctx.service.gmUser.getApiList();
}
public async saveApi() {
const { ctx } = this;
const {api, name} = ctx.request.body;
ctx.body = await ctx.service.gmUser.saveApi(api, name);
}
public async getGroupList() {
const { ctx } = this;
ctx.body = await ctx.service.gmUser.getGroupList();
}
public async createGmGroup() {
const { ctx } = this;
const {group, name, desc} = ctx.request.body;
ctx.body = await ctx.service.gmUser.createGmGroup(group, name, desc);
}
public async saveGmApiToGroup() {
const { ctx } = this;
const {id, apis} = ctx.request.body;
ctx.body = await ctx.service.gmUser.saveGmApiToGroup(id, apis);
}
public async saveGmGroupToUser() {
const { ctx } = this;
const {uid, groups} = ctx.request.body;
ctx.body = await ctx.service.gmUser.saveGmGroupToUser(uid, groups);
}
}
+23 -4
View File
@@ -15,10 +15,29 @@ export default class LoginController extends Controller {
"data": ctx.user
};
}
public async createGmAccount() {
public async getMenu() {
const { ctx } = this;
const {password, name, username, group} = ctx.request.body;
ctx.body = await ctx.service.gmUser.createGmAccount(name, username, password, group);
ctx.body = {
"status": "ok",
"data": [
{
path: '/test',
authority: ['admin'],
routes: [
{
path: '/test/create-role',
authority: ['admin'],
},
{
path: '/test/create-data',
authority: ['admin'],
}
],
}
]
}
}
}
+32 -1
View File
@@ -1,8 +1,11 @@
import { GMUserModel } from '@db/GMUser';
import { GMUserGroupModel } from '@db/GMUserGroup'
import { GMGroupModel } from '@db/GMGroup'
import { ApiModel } from '@db/Api';
module.exports = () => {
return async function tokenParser(ctx, next) {
console.log(ctx.request.headers)
if (!ctx.request.headers || !ctx.request.headers.token) {
console.error('token not found');
ctx.body = {
@@ -20,6 +23,34 @@ module.exports = () => {
};
return;
}
const url = ctx.request.url;
let apiResult = await ApiModel.getApi(url);
if(!apiResult) {
ctx.body = {
"status": "error",
"data": "未找到该接口"
};
return;
}
let userGroups = await GMUserGroupModel.getUserGroupByUid(user.uid, 1);
let flag = 0;
for(let userGroup of userGroups) {
let { groupId } = userGroup;
let group = await GMGroupModel.getGroupById(groupId);
if(group) {
if(group.apis.includes(apiResult.apiId)) {
flag = 1; break;
}
}
}
if(flag != 1) {
ctx.body = {
"status": "error",
"data": "您没有权限访问该接口"
};
return;
}
console.log(user.uid, ctx.request.url, new Date());
ctx.user = user;
await next();
};
+17 -6
View File
@@ -4,14 +4,25 @@ export default (app: Application) => {
const { controller, router } = app;
const tokenParser = app.middleware.tokenParser();
router.get('/', controller.home.index);
router.get('/api', controller.home.index);
router.post('/api/login/account', controller.login.login);
router.post('/api/get_route', controller.login.getMenu);
router.get('/api/currentUser', tokenParser, controller.login.currentUser);
router.post('/api/gmaccount/createaccount', controller.login.createGmAccount);
router.post('/api/users/getuserlist', controller.users.getuserlist);
router.post('/api/users/createrole', controller.users.createRole);
router.post('/api/users/getrolelist', controller.users.getrolelist);
router.post('/api/users/createroledata', controller.users.createRoleData);
router.post('/api/gmaccount/getgmlist', tokenParser, controller.gmaccount.getGmList);
router.post('/api/gmaccount/createaccount',tokenParser, controller.gmaccount.createGmAccount);
router.post('/api/gmaccount/savegmgrouptouser',tokenParser, controller.gmaccount.saveGmGroupToUser);
router.post('/api/gmaccount/getgrouplist',tokenParser, controller.gmaccount.getGroupList);
router.post('/api/gmaccount/getapilist',tokenParser, controller.gmaccount.getApiList);
router.post('/api/gmaccount/saveapi',tokenParser, controller.gmaccount.saveApi);
router.post('/api/gmaccount/creategmgroup',tokenParser, controller.gmaccount.createGmGroup);
router.post('/api/gmaccount/saveapitogroup',tokenParser, controller.gmaccount.saveGmApiToGroup);
router.post('/api/users/getuserlist',tokenParser, controller.users.getuserlist);
router.post('/api/users/createrole',tokenParser, controller.users.createRole);
router.post('/api/users/getrolelist',tokenParser, controller.users.getrolelist);
router.post('/api/users/createroledata',tokenParser, controller.users.createRoleData);
};
+202 -4
View File
@@ -1,4 +1,7 @@
import { GMUserModel } from '@db/GMUser';
import { GMGroupModel } from '@db/GMGroup';
import { GMUserGroupModel } from '@db/GMUserGroup';
import { ApiModel } from '@db/Api';
import { Service } from 'egg';
/**
@@ -14,9 +17,16 @@ export default class GMUsers extends Service {
let user = await GMUserModel.login(username, password);
if(user) {
let userGroups = await GMUserGroupModel.getUserGroupByUid(user.uid, 1);
let group = new Array();
for(let userGroup of userGroups) {
let g = await GMGroupModel.getGroupById(userGroup.groupId);
if(g) group.push(g.group);
}
return {
"status": "ok",
"data": user
"data": {...user, group}
}
} else {
return {
@@ -26,10 +36,45 @@ export default class GMUsers extends Service {
}
}
/**
* 后台账号列表
*/
public async getGmList() {
// const {ctx} = this;
let list = await GMUserModel.getGmAccountList();
if(list) {
let result = new Array();
for(let user of list) {
let uid = user.uid;
let userGroupList = await GMUserGroupModel.getUserGroupByUid(uid, 1);
let groupArr = new Array(), groupStrArr = new Array();
for(let userGroup of userGroupList) {
let group = await GMGroupModel.getGroupById(userGroup.groupId);
console.log(userGroup.groupId, group);
if(group) {
groupArr.push(userGroup.groupId);
groupStrArr.push(group.name);
}
}
result.push({...user, group:groupArr, groupStr: groupStrArr.length?groupStrArr.join():'暂无'});
}
return {
"status": "ok",
"data": result
}
} else {
return {
"status": "error",
"data": "获取失败"
}
}
}
/**
* 创建后台账号
*/
public async createGmAccount(name: string, username: string, password: string, group: string) {
public async createGmAccount(name: string, username: string, password: string) {
const {ctx} = this;
let token = ctx.service.utils.genCode(256);
@@ -40,11 +85,164 @@ export default class GMUsers extends Service {
"data": "该账号已使用"
}
} else {
user = await GMUserModel.createGmAccount(username, password, name, token, group);
user = await GMUserModel.createGmAccount(username, password, name, token);
return {
"status": "ok",
"data": user
"data": "创建成功"
};
}
}
/**
* 后台Api列表
*/
public async getApiList() {
// const {ctx} = this;
let list = await ApiModel.getAllApi();
if(list) {
return {
"status": "ok",
"data": list
}
} else {
return {
"status": "error",
"data": "获取失败"
}
}
}
/**
* 创建Api
*/
public async saveApi(api:string, name:string) {
// const {ctx} = this;
let result = await ApiModel.getApi(api);
if(result) {
return {
"status": "error",
"data": "该接口已存在"
}
} else {
let result = await ApiModel.createApi(api, name);
if(result) {
return {
"status": "ok",
"data": "创建成功"
}
} else {
return {
"status": "error",
"data": "创建失败"
}
}
}
}
/**
* 后台用户组列表
*/
public async getGroupList() {
// const {ctx} = this;
let list = await GMGroupModel.getAllGroup();
if(list) {
return {
"status": "ok",
"data": list
}
} else {
return {
"status": "error",
"data": "获取失败"
}
}
}
/**
* 创建用户组
*/
public async createGmGroup(group:string, name:string, desc: string) {
// const {ctx} = this;
let result = await GMGroupModel.getGroup(group);
if(result) {
return {
"status": "error",
"data": "该用户组已存在"
}
} else {
let result = await GMGroupModel.createGroup(group, name, desc);
if(result) {
return {
"status": "ok",
"data": "创建成功"
}
} else {
return {
"status": "error",
"data": "创建失败"
}
}
}
}
/**
* 用户组添加接口
*/
public async saveGmApiToGroup(apiId: number, apis: Array<number>) {
// const {ctx} = this;
let result = await GMGroupModel.saveApiToGroup(apiId, apis);
if(result) {
return {
"status": "ok",
"data": "保存成功"
}
} else {
return {
"status": "error",
"data": "保存失败"
}
}
}
/**
* 用户组添加接口
*/
public async saveGmGroupToUser(uid: number, groups: Array<number>) {
let allUserGroup = await GMUserGroupModel.getUserGroupByUid(uid, 1);
let removeArr = allUserGroup.filter(userGroup => {
let gid = userGroup.groupId;
return groups.indexOf(gid) == -1;
}).map(cur => cur.groupId);
let flag = 0;
let result = await GMUserGroupModel.removeUserGroup(uid, 1, removeArr);
if(!result) {
flag = 1;
}
if(!flag) {
for(let group of groups) {
let result = await GMUserGroupModel.addUserGroup(uid, 1, group);
if(!result) {
flag = 1; break;
}
}
}
if(flag) {
return {
"status": "error",
"data": "保存失败"
}
}
return {
"status": "ok",
"data": "保存成功"
}
}
}
+2
View File
@@ -2,12 +2,14 @@
// Do not modify this file!!!!!!!!!
import 'egg';
import ExportGmaccount from '../../../app/controller/gmaccount';
import ExportHome from '../../../app/controller/home';
import ExportLogin from '../../../app/controller/login';
import ExportUsers from '../../../app/controller/users';
declare module 'egg' {
interface IController {
gmaccount: ExportGmaccount;
home: ExportHome;
login: ExportLogin;
users: ExportUsers;