diff --git a/README.md b/README.md index b2388d6b595a3c08ac3297f87dc73970ebb603d6..fd3aa8ddc41c7697f3ba3076f395af15ae56fdd9 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ quick-node-express基于node和express框架实现的后端框架。 #### 软件架构 -软件架构说明 +软件架构说明; #### 安装教程 diff --git a/config/db.config.js b/config/db.config.js index f7e151f75e817288cbbffa3e82ed25fd282e1af4..fbd88288088e1b16806a794f9ab8ce5a02cd8de8 100644 --- a/config/db.config.js +++ b/config/db.config.js @@ -2,9 +2,9 @@ module.exports = { debug: false, //开启调试 host: "110.42.130.88", port: "3306", - user: "quick", + user: "quick1", password: "quick", - database: "quick", + database: "quick1", timezone: "08:00", dateStrings:true, stringifyObjects: true, //是否序列化对象 diff --git a/controllers/menuController.js b/controllers/menuController.js index c9438c26eca7b91969a6cff486a215937cb2919b..fe7c98191f821ed27f251ea149cf857973028060 100644 --- a/controllers/menuController.js +++ b/controllers/menuController.js @@ -4,14 +4,12 @@ const { updateMenu, deleteMenu, getPermissionMenuListByUserId, + getPermissionMenuListByRoleId, + assignPermission, } = require("../services/menuServices"); class MenuController { - constructor() {} - getPermission(body){ - const {id:userId}=body - return getPermissionMenuListByUserId(userId) - } + constructor() {} getList() { return getMenuList(); } diff --git a/controllers/roleController.js b/controllers/roleController.js index 14d790f04eae12922b8fad657564176499d4a0bb..89d060e865bbb43213813fd249ca0470b4f23193 100644 --- a/controllers/roleController.js +++ b/controllers/roleController.js @@ -1,11 +1,17 @@ const { + getPermissionMenuListByRoleId, getRoleList, addRole, updateRole, deleteRole, + assignPermission, } = require("../services/roleServices"); class RoleController { constructor() {} + getMenuPermission(body){ + const {id:roleId}=body + return getPermissionMenuListByRoleId(roleId) + } getList() { return getRoleList(); } @@ -21,5 +27,9 @@ class RoleController { const { id } = body; return deleteRole(id); } + assignMenu(body) { + const { roleId,menuIds } = body; + return assignPermission(roleId,menuIds); + } } module.exports = new RoleController(); diff --git a/controllers/userController.js b/controllers/userController.js index 871c31d5210d45a623209b3ee5440da98c436db0..8be991f27249c16aa799872fa78e2282584c3e34 100644 --- a/controllers/userController.js +++ b/controllers/userController.js @@ -1,4 +1,5 @@ const { + getUserPermission, getUserPageList, getUserDetail, getUserInfo, @@ -14,6 +15,10 @@ const { class UserController { constructor() {} + getPermission(body){ + const {id:userId}=body + return getUserPermission(userId) + } getPageList(query) { const { userName, current, size } = query; return getUserPageList(current, size, userName); diff --git a/model/menuModel.js b/model/menuModel.js index 3c55fe12b929e106b69bea3fd44ad7a3027db195..dbc579e358f6b601a4add1b30106df15db23c368 100644 --- a/model/menuModel.js +++ b/model/menuModel.js @@ -12,22 +12,44 @@ class MenuModel { const sqlArr = []; return db.queryAsync(sql, sqlArr); } - insert(dic) { + selectOne(id) { + const sql = `select * from sys_menus where id=?`; + const sqlArr = [id]; + console.log('11111111111111'); + return db.queryAsync(sql, sqlArr); + } + insert(menu) { const sql = - "insert into sys_menus(menu_id,menu_name) values(?,?)"; + "insert into sys_menus(menu_id, menu_name, path, menu_type, icon, sort, pid, link, enabled, status) values(?,?,?,?,?,?,?,?,?,?)"; const sqlArr = [ - dic.dicTypeId, - dic.name, + menu.menuId, + menu.menuName, + menu.path, + menu.menuType, + menu.icon, + menu.sort, + menu.pid, + menu.link, + menu.enabled, + menu.status ]; return db.queryAsync(sql, sqlArr); } - update(dic) { + update(menu) { const sql = - "update sys_menus set menu_name=? where id=?"; + "update sys_menus set menu_id = ?, menu_name = ?, path = ?, menu_type = ?, icon = ?, sort = ?, pid = ?, link = ?, enabled = ?, status = ? where id= ?"; const sqlArr = [ - dic.dicTypeId, - dic.name, - dic.id, + menu.menuId, + menu.menuName, + menu.path, + menu.menuType, + menu.icon, + menu.sort, + menu.pid, + menu.link, + menu.enabled, + menu.status, + menu.id ]; return db.queryAsync(sql, sqlArr); } diff --git a/model/roleMenuModel.js b/model/roleMenuModel.js index bae3b426a710de4b55857f1ae36b2f6554926922..2e904a0fa61adc8b295a24ce8ddfbf575c559410 100644 --- a/model/roleMenuModel.js +++ b/model/roleMenuModel.js @@ -2,38 +2,23 @@ const db = require("../config/dbPool"); class RoleModel { - select() { - const sql = "select * from per_role_menus"; - const sqlArr = []; - return db.queryAsync(sql, sqlArr); - } selectWhere(roleIds){ const sql = `select * from per_role_menus where role_id in(${roleIds})`; const sqlArr = []; return db.queryAsync(sql, sqlArr); } - insert(dic) { - const sql = - "insert into per_role_menus(role_id,role_name) values(?,?)"; - const sqlArr = [ - dic.roleId, - dic.roleName, - ]; - return db.queryAsync(sql, sqlArr); - } - update(dic) { + insert(roleMenu) { const sql = - "update per_role_menus set role_name=? where id=?"; + "insert into per_role_menus(role_id,menu_id) values(?,?)"; const sqlArr = [ - dic.roleId, - dic.roleName, - dic.id, + roleMenu.roleId, + roleMenu.menuId, ]; return db.queryAsync(sql, sqlArr); } - remove(id) { - const sql = "delete from per_role_menus where id=?"; - const sqlArr = [id]; + removeWhere(roleId) { + const sql = "delete from per_role_menus where role_id=?"; + const sqlArr = [roleId]; return db.queryAsync(sql, sqlArr); } } diff --git a/model/roleModel.js b/model/roleModel.js index 0c7dabe267565ba17fe936ecfd608f39c5abfe65..ddd7ca7c41b2c886fa41fcf1d2257e558ef9df5c 100644 --- a/model/roleModel.js +++ b/model/roleModel.js @@ -20,7 +20,6 @@ class RoleModel { const sql = "update sys_roles set role_name=? where id=?"; const sqlArr = [ - dic.roleId, dic.roleName, dic.id, ]; diff --git a/router/menu.js b/router/menu.js index 3a2bd86508081e12eaa4108d48d13c009fb54c26..12fd8bb0f9373fa98dbef807e1d7c39b2dad01a9 100644 --- a/router/menu.js +++ b/router/menu.js @@ -1,19 +1,15 @@ const express = require("express"); const router = express.Router(); const { + getRoleMenuLsit, getPermission, getList, add, update, remove, + assign, } = require("../controllers/menuController"); -router.get("/api/menu/getPermission", (req, res) => { - const { query } = req; - getPermission(query).then((data) => { - res.send(data); - }); -}); router.get("/api/menu/getList", (req, res) => { const { query } = req; getList(query).then((data) => { @@ -40,4 +36,6 @@ router.post("/api/menu/delete", (req, res) => { }); }); + + module.exports = router; diff --git a/router/role.js b/router/role.js index 12b643094a8a50a1ccb39dfa7aceb7ab3c2e1df2..ab43ca6c9cb2d9301a969c7a99188f59326e4551 100644 --- a/router/role.js +++ b/router/role.js @@ -1,12 +1,20 @@ const express = require("express"); const router = express.Router(); const { + getMenuPermission, getList, add, update, remove, + assignMenu, } = require("../controllers/roleController"); +router.get("/api/role/getMenuPermission", (req, res) => { + const { query } = req; + getMenuPermission(query).then((data) => { + res.send(data); + }); +}); router.get("/api/role/getList", (req, res) => { const { query } = req; getList(query).then((data) => { @@ -32,5 +40,10 @@ router.post("/api/role/delete", (req, res) => { res.send(data); }); }); - +router.post("/api/role/assignPermission", (req, res) => { + const { body } = req; + assignMenu(body).then((data) => { + res.send(data); + }); +}); module.exports = router; diff --git a/router/user.js b/router/user.js index 0a0e0a01be13d538ddb0e69b3ed7e839d45a5cd7..b66b5e678a4232da8c541594d512b4a383ead024 100644 --- a/router/user.js +++ b/router/user.js @@ -1,6 +1,7 @@ const express = require("express"); const router = express.Router(); const { + getPermission, getPageList, getDetail, getInfo, @@ -14,6 +15,12 @@ const { disable, } = require("../controllers/userController"); +router.get("/api/user/getPermission", (req, res) => { + const { query } = req; + getPermission(query).then((data) => { + res.send(data); + }); +}); router.get("/api/user/getPageList", (req, res) => { const { query } = req; getPageList(query).then((data) => { diff --git a/services/menuServices.js b/services/menuServices.js index 857d7d199e9dd64319fd1c1e6553880c521f342a..0ad5287954f91a5dfbfacfb1113377fa469e9f2f 100644 --- a/services/menuServices.js +++ b/services/menuServices.js @@ -1,49 +1,17 @@ const { select, selectWhere, + selectOne, insert, update, remove } = require("../model/menuModel"); - const {getUserRoleListByUserId} =require('./userRoleServices') -const {getRoleMenuListByIds} =require('./roleMenuServices') + class MenuServices { constructor() {} - async getPermissionMenuListByUserId(userId){ - - const userRoleList=await getUserRoleListByUserId(userId) - const roleIdArr=[] - const menuIdArr=[] - userRoleList.forEach(async (element) => { - const roleId=element.role_id - roleIdArr.push(roleId) - }); - if(roleIdArr.length<=0){ - return { - status: 0, - msg: "授权菜单列表", - data:[] - }; - } - const roleIds= roleIdArr.join(',') - const roleMenuList=await getRoleMenuListByIds(roleIds) - roleMenuList.forEach(element => { - const menuId=element.menu_id - const index=menuIdArr.indexOf(menuId) - if(index==-1){ - menuIdArr.push(menuId) - } - }); - if(menuIdArr.length<=0){ - return { - status: 0, - msg: "授权菜单列表", - data:[] - }; - } - const menuIds= menuIdArr.join(',') - const menuListResult = await selectWhere(menuIds); + async getMenuListByIds(menuIds) { + const menuListResult = await selectWhere(menuIds); const menuList = menuListResult.results && menuListResult.results; const jsonObj = { status: 0, @@ -62,6 +30,17 @@ class MenuServices { }; return jsonObj; } + async getMenuDetail(id){ + const menuResult=await selectOne(id) + console.log('22222222222'); + const menuDetail = menuResult.results && menuResult.results[0]; + const jsonObj = { + status: 0, + msg: "菜单详情", + data:menuDetail + }; + return jsonObj + } async addMenu(menu) { await insert(menu); const jsonObj = { diff --git a/services/roleMenuServices.js b/services/roleMenuServices.js index 52aaa2d5ce1945a29c0154d4cebde658e8d332e1..9cdb4a6df81f1fbfaad2c212089f129a1445c8d8 100644 --- a/services/roleMenuServices.js +++ b/services/roleMenuServices.js @@ -1,13 +1,20 @@ const { - selectWhere + selectWhere, + removeWhere, + insert } = require("../model/roleMenuModel"); class RoleMenuServices { constructor() {} - async getRoleMenuListByIds(roleIds) { + async getRoleMenuListByRoleIds(roleIds) { const roleMenuListResult = await selectWhere(roleIds) const roleMenuList = roleMenuListResult.results && roleMenuListResult.results; - return roleMenuList + const jsonObj = { + status: 0, + msg: "分配的菜单列表", + data:roleMenuList + }; + return jsonObj; } async getAssignedUserList(userId) { const userRoleListResult = await selectWhere('user_id',userId) @@ -19,21 +26,16 @@ class RoleMenuServices { }; return jsonObj; } - async allotUser(userRole) { - await insert(userRole); - const jsonObj = { - status: 0, - msg: "分配用户成功", - data: null, - }; - return jsonObj; - } - - async unassignUser(id) { - await remove(id); + async bindMenuForRole(roleId,menuIds) { + await removeWhere(roleId) + const menuIdArr=menuIds.split(',') + menuIdArr.forEach(async (menuId)=>{ + const roleMenu={roleId,menuId} + await insert(roleMenu); + }) const jsonObj = { status: 0, - msg: "取消分配用户成功", + msg: "角色权限分配成功", data: null, }; return jsonObj; diff --git a/services/roleServices.js b/services/roleServices.js index 5f977c968962b82683a7358e015ffbc61f5fbfcb..13836511635d871ab9e9b3fa71d0664f72c2ec57 100644 --- a/services/roleServices.js +++ b/services/roleServices.js @@ -4,9 +4,37 @@ const { update, remove } = require("../model/roleModel"); + const { + getRoleMenuListByRoleIds, + bindMenuForRole +} =require('./roleMenuServices') +const { + getMenuListByIds, +} =require('./menuServices') class RoleServices { constructor() {} + async getPermissionMenuListByRoleId(roleId){ + const menuIdArr=[] + const roleMenuReuslt=await getRoleMenuListByRoleIds(roleId) + const roleMenuList=roleMenuReuslt.data + roleMenuList.forEach(element => { + const menuId=element.menu_id + const index=menuIdArr.indexOf(menuId) + if(index==-1){ + menuIdArr.push(menuId) + } + }); + if(menuIdArr.length<=0){ + return { + status: 0, + msg: "授权菜单列表", + data:[] + }; + } + const menuIds= menuIdArr.join(',') + return await getMenuListByIds(menuIds); + } async getRoleList() { const roleListResult = await select(); const roleList = roleListResult.results && roleListResult.results; @@ -44,5 +72,10 @@ class RoleServices { }; return jsonObj; } + + async assignPermission(roleId,menuIds) { + const jsonObj =await bindMenuForRole(roleId,menuIds); + return jsonObj; + } } module.exports = new RoleServices(); diff --git a/services/userServices.js b/services/userServices.js index 66d2acf5b27278ba4c5c3d2bf0618eb77909de3a..a4594e3bfcca1484c746807133b5b48802b59843 100644 --- a/services/userServices.js +++ b/services/userServices.js @@ -8,14 +8,79 @@ const { updateField, remove, } = require("../model/userModel"); +const { getUserRoleListByUserId } = require("./userRoleServices"); +const { getRoleMenuListByRoleIds } = require("./roleMenuServices"); +const { + getMenuListByIds, + getMenuList, +} = require("./menuServices"); class UserServices { constructor() {} + async getUserPermission(userId) { + const userRoleList = await getUserRoleListByUserId(userId); + const roleIdArr = []; + const menuIdArr = []; + userRoleList.forEach(async (element) => { + const roleId = element.role_id; + roleIdArr.push(roleId); + }); + if (roleIdArr.length <= 0) { + return { + status: 0, + msg: "授权菜单列表", + data: [], + }; + } + const roleIds = roleIdArr.join(","); + const roleMenuResult = await getRoleMenuListByRoleIds(roleIds); + const roleMenuList = roleMenuResult.data; + roleMenuList.forEach((element) => { + const menuId = element.menu_id; + const index = menuIdArr.indexOf(menuId); + if (index == -1) { + menuIdArr.push(menuId); + } + }); + if (menuIdArr.length <= 0) { + return { + status: 0, + msg: "授权菜单列表", + data: [], + }; + } + const menuListResult = await getMenuList(); + const menuList = menuListResult.data; + + const menuIdArrNew = []; + menuIdArr.forEach((menuId) => { + menuIdArrNew.push(menuId); + const menu = menuList.find((x) => { + return x.id === menuId; + }); + const pid = menu.pid; + const index = menuIdArrNew.indexOf(pid); + if (pid !== 0 && index === -1) { + menuIdArrNew.push(pid); + + const parentMenu = menuList.find((x) => { + return x.id === pid; + }); + const pid1 = parentMenu.pid; + const index1 = menuIdArrNew.indexOf(pid1); + if (pid1 !== 0 && index1 === -1) { + menuIdArrNew.push(pid1); + } + } + }); + const menuIds = menuIdArrNew.join(","); + return await getMenuListByIds(menuIds); + } async userLogin(loginInfo) { const { userName, userPassword } = loginInfo; - const fields=['user_name'] - const values=[userName] - const result = await selectOneWhere(fields,values); + const fields = ["user_name"]; + const values = [userName]; + const result = await selectOneWhere(fields, values); const user = result.results && result.results[0]; const password = user && user.password; const passwordMd5 = quickMd5(userPassword);