61b023a42127d35fe5d82a1a653ecad1f977ce78.svn-base 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822
  1. package org.jeecg.modules.system.controller;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  5. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.apache.commons.lang3.StringUtils;
  8. import org.apache.shiro.SecurityUtils;
  9. import org.jeecg.common.api.vo.Result;
  10. import org.jeecg.common.constant.CommonConstant;
  11. import org.jeecg.common.constant.enums.RoleIndexConfigEnum;
  12. import org.jeecg.common.system.vo.LoginUser;
  13. import org.jeecg.common.util.MD5Util;
  14. import org.jeecg.common.util.oConvertUtils;
  15. import org.jeecg.modules.system.entity.SysDepartPermission;
  16. import org.jeecg.modules.system.entity.SysPermission;
  17. import org.jeecg.modules.system.entity.SysPermissionDataRule;
  18. import org.jeecg.modules.system.entity.SysRolePermission;
  19. import org.jeecg.modules.system.model.SysPermissionTree;
  20. import org.jeecg.modules.system.model.TreeModel;
  21. import org.jeecg.modules.system.service.*;
  22. import org.jeecg.modules.system.util.PermissionDataUtil;
  23. import org.springframework.beans.factory.annotation.Autowired;
  24. import org.springframework.web.bind.annotation.*;
  25. import java.util.*;
  26. import java.util.stream.Collectors;
  27. /**
  28. * <p>
  29. * 菜单权限表 前端控制器
  30. * </p>
  31. *
  32. * @Author scott
  33. * @since 2018-12-21
  34. */
  35. @Slf4j
  36. @RestController
  37. @RequestMapping("/sys/permission")
  38. public class SysPermissionController {
  39. @Autowired
  40. private ISysPermissionService sysPermissionService;
  41. @Autowired
  42. private ISysRolePermissionService sysRolePermissionService;
  43. @Autowired
  44. private ISysPermissionDataRuleService sysPermissionDataRuleService;
  45. @Autowired
  46. private ISysDepartPermissionService sysDepartPermissionService;
  47. @Autowired
  48. private ISysUserService sysUserService;
  49. /**
  50. * 加载数据节点
  51. *
  52. * @return
  53. */
  54. @RequestMapping(value = "/list", method = RequestMethod.GET)
  55. public Result<List<SysPermissionTree>> list() {
  56. long start = System.currentTimeMillis();
  57. Result<List<SysPermissionTree>> result = new Result<>();
  58. try {
  59. LambdaQueryWrapper<SysPermission> query = new LambdaQueryWrapper<SysPermission>();
  60. query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0);
  61. query.orderByAsc(SysPermission::getSortNo);
  62. List<SysPermission> list = sysPermissionService.list(query);
  63. List<SysPermissionTree> treeList = new ArrayList<>();
  64. getTreeList(treeList, list, null);
  65. result.setResult(treeList);
  66. result.setSuccess(true);
  67. log.info("======获取全部菜单数据=====耗时:" + (System.currentTimeMillis() - start) + "毫秒");
  68. } catch (Exception e) {
  69. log.error(e.getMessage(), e);
  70. }
  71. return result;
  72. }
  73. /*update_begin author:wuxianquan date:20190908 for:先查询一级菜单,当用户点击展开菜单时加载子菜单 */
  74. /**
  75. * 系统菜单列表(一级菜单)
  76. *
  77. * @return
  78. */
  79. @RequestMapping(value = "/getSystemMenuList", method = RequestMethod.GET)
  80. public Result<List<SysPermissionTree>> getSystemMenuList() {
  81. long start = System.currentTimeMillis();
  82. Result<List<SysPermissionTree>> result = new Result<>();
  83. try {
  84. LambdaQueryWrapper<SysPermission> query = new LambdaQueryWrapper<SysPermission>();
  85. query.eq(SysPermission::getMenuType,CommonConstant.MENU_TYPE_0);
  86. query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0);
  87. query.orderByAsc(SysPermission::getSortNo);
  88. List<SysPermission> list = sysPermissionService.list(query);
  89. List<SysPermissionTree> sysPermissionTreeList = new ArrayList<SysPermissionTree>();
  90. for(SysPermission sysPermission : list){
  91. SysPermissionTree sysPermissionTree = new SysPermissionTree(sysPermission);
  92. sysPermissionTreeList.add(sysPermissionTree);
  93. }
  94. result.setResult(sysPermissionTreeList);
  95. result.setSuccess(true);
  96. } catch (Exception e) {
  97. log.error(e.getMessage(), e);
  98. }
  99. log.info("======获取一级菜单数据=====耗时:" + (System.currentTimeMillis() - start) + "毫秒");
  100. return result;
  101. }
  102. /**
  103. * 查询子菜单
  104. * @param parentId
  105. * @return
  106. */
  107. @RequestMapping(value = "/getSystemSubmenu", method = RequestMethod.GET)
  108. public Result<List<SysPermissionTree>> getSystemSubmenu(@RequestParam("parentId") String parentId){
  109. Result<List<SysPermissionTree>> result = new Result<>();
  110. try{
  111. LambdaQueryWrapper<SysPermission> query = new LambdaQueryWrapper<SysPermission>();
  112. query.eq(SysPermission::getParentId,parentId);
  113. query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0);
  114. query.orderByAsc(SysPermission::getSortNo);
  115. List<SysPermission> list = sysPermissionService.list(query);
  116. List<SysPermissionTree> sysPermissionTreeList = new ArrayList<SysPermissionTree>();
  117. for(SysPermission sysPermission : list){
  118. SysPermissionTree sysPermissionTree = new SysPermissionTree(sysPermission);
  119. sysPermissionTreeList.add(sysPermissionTree);
  120. }
  121. result.setResult(sysPermissionTreeList);
  122. result.setSuccess(true);
  123. }catch (Exception e){
  124. log.error(e.getMessage(), e);
  125. }
  126. return result;
  127. }
  128. /*update_end author:wuxianquan date:20190908 for:先查询一级菜单,当用户点击展开菜单时加载子菜单 */
  129. // update_begin author:sunjianlei date:20200108 for: 新增批量根据父ID查询子级菜单的接口 -------------
  130. /**
  131. * 查询子菜单
  132. *
  133. * @param parentIds 父ID(多个采用半角逗号分割)
  134. * @return 返回 key-value 的 Map
  135. */
  136. @GetMapping("/getSystemSubmenuBatch")
  137. public Result getSystemSubmenuBatch(@RequestParam("parentIds") String parentIds) {
  138. try {
  139. LambdaQueryWrapper<SysPermission> query = new LambdaQueryWrapper<>();
  140. List<String> parentIdList = Arrays.asList(parentIds.split(","));
  141. query.in(SysPermission::getParentId, parentIdList);
  142. query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0);
  143. query.orderByAsc(SysPermission::getSortNo);
  144. List<SysPermission> list = sysPermissionService.list(query);
  145. Map<String, List<SysPermissionTree>> listMap = new HashMap<>();
  146. for (SysPermission item : list) {
  147. String pid = item.getParentId();
  148. if (parentIdList.contains(pid)) {
  149. List<SysPermissionTree> mapList = listMap.get(pid);
  150. if (mapList == null) {
  151. mapList = new ArrayList<>();
  152. }
  153. mapList.add(new SysPermissionTree(item));
  154. listMap.put(pid, mapList);
  155. }
  156. }
  157. return Result.ok(listMap);
  158. } catch (Exception e) {
  159. log.error(e.getMessage(), e);
  160. return Result.error("批量查询子菜单失败:" + e.getMessage());
  161. }
  162. }
  163. // update_end author:sunjianlei date:20200108 for: 新增批量根据父ID查询子级菜单的接口 -------------
  164. // /**
  165. // * 查询用户拥有的菜单权限和按钮权限(根据用户账号)
  166. // *
  167. // * @return
  168. // */
  169. // @RequestMapping(value = "/queryByUser", method = RequestMethod.GET)
  170. // public Result<JSONArray> queryByUser(HttpServletRequest req) {
  171. // Result<JSONArray> result = new Result<>();
  172. // try {
  173. // String username = req.getParameter("username");
  174. // List<SysPermission> metaList = sysPermissionService.queryByUser(username);
  175. // JSONArray jsonArray = new JSONArray();
  176. // this.getPermissionJsonArray(jsonArray, metaList, null);
  177. // result.setResult(jsonArray);
  178. // result.success("查询成功");
  179. // } catch (Exception e) {
  180. // result.error500("查询失败:" + e.getMessage());
  181. // log.error(e.getMessage(), e);
  182. // }
  183. // return result;
  184. // }
  185. /**
  186. * 查询用户拥有的菜单权限和按钮权限
  187. *
  188. * @return
  189. */
  190. @RequestMapping(value = "/getUserPermissionByToken", method = RequestMethod.GET)
  191. public Result<?> getUserPermissionByToken() {
  192. Result<JSONObject> result = new Result<JSONObject>();
  193. try {
  194. //直接获取当前用户不适用前端token
  195. LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
  196. if (oConvertUtils.isEmpty(loginUser)) {
  197. return Result.error("请登录系统!");
  198. }
  199. List<SysPermission> metaList = sysPermissionService.queryByUser(loginUser.getUsername());
  200. //添加首页路由
  201. //update-begin-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存
  202. if(!PermissionDataUtil.hasIndexPage(metaList)){
  203. SysPermission indexMenu = sysPermissionService.list(new LambdaQueryWrapper<SysPermission>().eq(SysPermission::getName,"首页")).get(0);
  204. //update-begin--Author:liusq Date:20210624 for:自定义首页地址LOWCOD-1578
  205. List<String> roles = sysUserService.getRole(loginUser.getUsername());
  206. if(roles.size()>0){
  207. for (String code:roles) {
  208. String componentUrl = RoleIndexConfigEnum.getIndexByCode(code);
  209. if(StringUtils.isNotBlank(componentUrl)){
  210. indexMenu.setComponent(componentUrl);
  211. break;
  212. }
  213. }
  214. }
  215. //update-end--Author:liusq Date:20210624 for:自定义首页地址LOWCOD-1578
  216. metaList.add(0,indexMenu);
  217. }
  218. //update-end-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存
  219. JSONObject json = new JSONObject();
  220. JSONArray menujsonArray = new JSONArray();
  221. this.getPermissionJsonArray(menujsonArray, metaList, null);
  222. JSONArray authjsonArray = new JSONArray();
  223. this.getAuthJsonArray(authjsonArray, metaList);
  224. //查询所有的权限
  225. LambdaQueryWrapper<SysPermission> query = new LambdaQueryWrapper<SysPermission>();
  226. query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0);
  227. query.eq(SysPermission::getMenuType, CommonConstant.MENU_TYPE_2);
  228. //query.eq(SysPermission::getStatus, "1");
  229. List<SysPermission> allAuthList = sysPermissionService.list(query);
  230. JSONArray allauthjsonArray = new JSONArray();
  231. this.getAllAuthJsonArray(allauthjsonArray, allAuthList);
  232. //路由菜单
  233. json.put("menu", menujsonArray);
  234. //按钮权限(用户拥有的权限集合)
  235. json.put("auth", authjsonArray);
  236. //全部权限配置集合(按钮权限,访问权限)
  237. json.put("allAuth", allauthjsonArray);
  238. result.setResult(json);
  239. result.success("查询成功");
  240. } catch (Exception e) {
  241. result.error500("查询失败:" + e.getMessage());
  242. log.error(e.getMessage(), e);
  243. }
  244. return result;
  245. }
  246. /**
  247. * 添加菜单
  248. * @param permission
  249. * @return
  250. */
  251. //@RequiresRoles({ "admin" })
  252. @RequestMapping(value = "/add", method = RequestMethod.POST)
  253. public Result<SysPermission> add(@RequestBody SysPermission permission) {
  254. Result<SysPermission> result = new Result<SysPermission>();
  255. try {
  256. permission = PermissionDataUtil.intelligentProcessData(permission);
  257. sysPermissionService.addPermission(permission);
  258. result.success("添加成功!");
  259. } catch (Exception e) {
  260. log.error(e.getMessage(), e);
  261. result.error500("操作失败");
  262. }
  263. return result;
  264. }
  265. /**
  266. * 编辑菜单
  267. * @param permission
  268. * @return
  269. */
  270. //@RequiresRoles({ "admin" })
  271. @RequestMapping(value = "/edit", method = { RequestMethod.POST, RequestMethod.POST })
  272. public Result<SysPermission> edit(@RequestBody SysPermission permission) {
  273. Result<SysPermission> result = new Result<>();
  274. try {
  275. permission = PermissionDataUtil.intelligentProcessData(permission);
  276. sysPermissionService.editPermission(permission);
  277. result.success("修改成功!");
  278. } catch (Exception e) {
  279. log.error(e.getMessage(), e);
  280. result.error500("操作失败");
  281. }
  282. return result;
  283. }
  284. /**
  285. * 删除菜单
  286. * @param id
  287. * @return
  288. */
  289. //@RequiresRoles({ "admin" })
  290. @RequestMapping(value = "/delete", method = RequestMethod.POST)
  291. public Result<SysPermission> delete(@RequestParam(name = "id", required = true) String id) {
  292. Result<SysPermission> result = new Result<>();
  293. try {
  294. sysPermissionService.deletePermission(id);
  295. result.success("删除成功!");
  296. } catch (Exception e) {
  297. log.error(e.getMessage(), e);
  298. result.error500(e.getMessage());
  299. }
  300. return result;
  301. }
  302. /**
  303. * 批量删除菜单
  304. * @param ids
  305. * @return
  306. */
  307. //@RequiresRoles({ "admin" })
  308. @RequestMapping(value = "/deleteBatch", method = RequestMethod.POST)
  309. public Result<SysPermission> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
  310. Result<SysPermission> result = new Result<>();
  311. try {
  312. String[] arr = ids.split(",");
  313. for (String id : arr) {
  314. if (oConvertUtils.isNotEmpty(id)) {
  315. sysPermissionService.deletePermission(id);
  316. }
  317. }
  318. result.success("删除成功!");
  319. } catch (Exception e) {
  320. log.error(e.getMessage(), e);
  321. result.error500("删除成功!");
  322. }
  323. return result;
  324. }
  325. /**
  326. * 获取全部的权限树
  327. *
  328. * @return
  329. */
  330. @RequestMapping(value = "/queryTreeList", method = RequestMethod.GET)
  331. public Result<Map<String, Object>> queryTreeList() {
  332. Result<Map<String, Object>> result = new Result<>();
  333. // 全部权限ids
  334. List<String> ids = new ArrayList<>();
  335. try {
  336. LambdaQueryWrapper<SysPermission> query = new LambdaQueryWrapper<SysPermission>();
  337. query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0);
  338. query.orderByAsc(SysPermission::getSortNo);
  339. List<SysPermission> list = sysPermissionService.list(query);
  340. for (SysPermission sysPer : list) {
  341. ids.add(sysPer.getId());
  342. }
  343. List<TreeModel> treeList = new ArrayList<>();
  344. getTreeModelList(treeList, list, null);
  345. Map<String, Object> resMap = new HashMap<String, Object>();
  346. resMap.put("treeList", treeList); // 全部树节点数据
  347. resMap.put("ids", ids);// 全部树ids
  348. result.setResult(resMap);
  349. result.setSuccess(true);
  350. } catch (Exception e) {
  351. log.error(e.getMessage(), e);
  352. }
  353. return result;
  354. }
  355. /**
  356. * 异步加载数据节点
  357. *
  358. * @return
  359. */
  360. @RequestMapping(value = "/queryListAsync", method = RequestMethod.GET)
  361. public Result<List<TreeModel>> queryAsync(@RequestParam(name = "pid", required = false) String parentId) {
  362. Result<List<TreeModel>> result = new Result<>();
  363. try {
  364. List<TreeModel> list = sysPermissionService.queryListByParentId(parentId);
  365. if (list == null || list.size() <= 0) {
  366. result.error500("未找到角色信息");
  367. } else {
  368. result.setResult(list);
  369. result.setSuccess(true);
  370. }
  371. } catch (Exception e) {
  372. log.error(e.getMessage(), e);
  373. }
  374. return result;
  375. }
  376. /**
  377. * 查询角色授权
  378. *
  379. * @return
  380. */
  381. @RequestMapping(value = "/queryRolePermission", method = RequestMethod.GET)
  382. public Result<List<String>> queryRolePermission(@RequestParam(name = "roleId", required = true) String roleId) {
  383. Result<List<String>> result = new Result<>();
  384. try {
  385. List<SysRolePermission> list = sysRolePermissionService.list(new QueryWrapper<SysRolePermission>().lambda().eq(SysRolePermission::getRoleId, roleId));
  386. result.setResult(list.stream().map(SysRolePermission -> String.valueOf(SysRolePermission.getPermissionId())).collect(Collectors.toList()));
  387. result.setSuccess(true);
  388. } catch (Exception e) {
  389. log.error(e.getMessage(), e);
  390. }
  391. return result;
  392. }
  393. /**
  394. * 保存角色授权
  395. *
  396. * @return
  397. */
  398. @RequestMapping(value = "/saveRolePermission", method = RequestMethod.POST)
  399. //@RequiresRoles({ "admin" })
  400. public Result<String> saveRolePermission(@RequestBody JSONObject json) {
  401. long start = System.currentTimeMillis();
  402. Result<String> result = new Result<>();
  403. try {
  404. String roleId = json.getString("roleId");
  405. String permissionIds = json.getString("permissionIds");
  406. String lastPermissionIds = json.getString("lastpermissionIds");
  407. this.sysRolePermissionService.saveRolePermission(roleId, permissionIds, lastPermissionIds);
  408. result.success("保存成功!");
  409. log.info("======角色授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒");
  410. } catch (Exception e) {
  411. result.error500("授权失败!");
  412. log.error(e.getMessage(), e);
  413. }
  414. return result;
  415. }
  416. private void getTreeList(List<SysPermissionTree> treeList, List<SysPermission> metaList, SysPermissionTree temp) {
  417. for (SysPermission permission : metaList) {
  418. String tempPid = permission.getParentId();
  419. SysPermissionTree tree = new SysPermissionTree(permission);
  420. if (temp == null && oConvertUtils.isEmpty(tempPid)) {
  421. treeList.add(tree);
  422. if (!tree.getIsLeaf()) {
  423. getTreeList(treeList, metaList, tree);
  424. }
  425. } else if (temp != null && tempPid != null && tempPid.equals(temp.getId())) {
  426. temp.getChildren().add(tree);
  427. if (!tree.getIsLeaf()) {
  428. getTreeList(treeList, metaList, tree);
  429. }
  430. }
  431. }
  432. }
  433. private void getTreeModelList(List<TreeModel> treeList, List<SysPermission> metaList, TreeModel temp) {
  434. for (SysPermission permission : metaList) {
  435. String tempPid = permission.getParentId();
  436. TreeModel tree = new TreeModel(permission);
  437. if (temp == null && oConvertUtils.isEmpty(tempPid)) {
  438. treeList.add(tree);
  439. if (!tree.getIsLeaf()) {
  440. getTreeModelList(treeList, metaList, tree);
  441. }
  442. } else if (temp != null && tempPid != null && tempPid.equals(temp.getKey())) {
  443. temp.getChildren().add(tree);
  444. if (!tree.getIsLeaf()) {
  445. getTreeModelList(treeList, metaList, tree);
  446. }
  447. }
  448. }
  449. }
  450. /**
  451. * 获取权限JSON数组
  452. * @param jsonArray
  453. * @param allList
  454. */
  455. private void getAllAuthJsonArray(JSONArray jsonArray,List<SysPermission> allList) {
  456. JSONObject json = null;
  457. for (SysPermission permission : allList) {
  458. json = new JSONObject();
  459. json.put("action", permission.getPerms());
  460. json.put("status", permission.getStatus());
  461. //1显示2禁用
  462. json.put("type", permission.getPermsType());
  463. json.put("describe", permission.getName());
  464. jsonArray.add(json);
  465. }
  466. }
  467. /**
  468. * 获取权限JSON数组
  469. * @param jsonArray
  470. * @param metaList
  471. */
  472. private void getAuthJsonArray(JSONArray jsonArray,List<SysPermission> metaList) {
  473. for (SysPermission permission : metaList) {
  474. if(permission.getMenuType()==null) {
  475. continue;
  476. }
  477. JSONObject json = null;
  478. if(permission.getMenuType().equals(CommonConstant.MENU_TYPE_2) &&CommonConstant.STATUS_1.equals(permission.getStatus())) {
  479. json = new JSONObject();
  480. json.put("action", permission.getPerms());
  481. json.put("type", permission.getPermsType());
  482. json.put("describe", permission.getName());
  483. jsonArray.add(json);
  484. }
  485. }
  486. }
  487. /**
  488. * 获取菜单JSON数组
  489. * @param jsonArray
  490. * @param metaList
  491. * @param parentJson
  492. */
  493. private void getPermissionJsonArray(JSONArray jsonArray, List<SysPermission> metaList, JSONObject parentJson) {
  494. for (SysPermission permission : metaList) {
  495. if (permission.getMenuType() == null) {
  496. continue;
  497. }
  498. String tempPid = permission.getParentId();
  499. JSONObject json = getPermissionJsonObject(permission);
  500. if(json==null) {
  501. continue;
  502. }
  503. if (parentJson == null && oConvertUtils.isEmpty(tempPid)) {
  504. jsonArray.add(json);
  505. if (!permission.isLeaf()) {
  506. getPermissionJsonArray(jsonArray, metaList, json);
  507. }
  508. } else if (parentJson != null && oConvertUtils.isNotEmpty(tempPid) && tempPid.equals(parentJson.getString("id"))) {
  509. // 类型( 0:一级菜单 1:子菜单 2:按钮 )
  510. if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_2)) {
  511. JSONObject metaJson = parentJson.getJSONObject("meta");
  512. if (metaJson.containsKey("permissionList")) {
  513. metaJson.getJSONArray("permissionList").add(json);
  514. } else {
  515. JSONArray permissionList = new JSONArray();
  516. permissionList.add(json);
  517. metaJson.put("permissionList", permissionList);
  518. }
  519. // 类型( 0:一级菜单 1:子菜单 2:按钮 )
  520. } else if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_1) || permission.getMenuType().equals(CommonConstant.MENU_TYPE_0)) {
  521. if (parentJson.containsKey("children")) {
  522. parentJson.getJSONArray("children").add(json);
  523. } else {
  524. JSONArray children = new JSONArray();
  525. children.add(json);
  526. parentJson.put("children", children);
  527. }
  528. if (!permission.isLeaf()) {
  529. getPermissionJsonArray(jsonArray, metaList, json);
  530. }
  531. }
  532. }
  533. }
  534. }
  535. /**
  536. * 根据菜单配置生成路由json
  537. * @param permission
  538. * @return
  539. */
  540. private JSONObject getPermissionJsonObject(SysPermission permission) {
  541. JSONObject json = new JSONObject();
  542. // 类型(0:一级菜单 1:子菜单 2:按钮)
  543. if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_2)) {
  544. //json.put("action", permission.getPerms());
  545. //json.put("type", permission.getPermsType());
  546. //json.put("describe", permission.getName());
  547. return null;
  548. } else if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_0) || permission.getMenuType().equals(CommonConstant.MENU_TYPE_1)) {
  549. json.put("id", permission.getId());
  550. if (permission.isRoute()) {
  551. json.put("route", "1");// 表示生成路由
  552. } else {
  553. json.put("route", "0");// 表示不生成路由
  554. }
  555. if (isWWWHttpUrl(permission.getUrl())) {
  556. json.put("path", MD5Util.MD5Encode(permission.getUrl(), "utf-8"));
  557. } else {
  558. json.put("path", permission.getUrl());
  559. }
  560. // 重要规则:路由name (通过URL生成路由name,路由name供前端开发,页面跳转使用)
  561. if (oConvertUtils.isNotEmpty(permission.getComponentName())) {
  562. json.put("name", permission.getComponentName());
  563. } else {
  564. json.put("name", urlToRouteName(permission.getUrl()));
  565. }
  566. // 是否隐藏路由,默认都是显示的
  567. if (permission.isHidden()) {
  568. json.put("hidden", true);
  569. }
  570. // 聚合路由
  571. if (permission.isAlwaysShow()) {
  572. json.put("alwaysShow", true);
  573. }
  574. json.put("component", permission.getComponent());
  575. JSONObject meta = new JSONObject();
  576. // 由用户设置是否缓存页面 用布尔值
  577. if (permission.isKeepAlive()) {
  578. meta.put("keepAlive", true);
  579. } else {
  580. meta.put("keepAlive", false);
  581. }
  582. /*update_begin author:wuxianquan date:20190908 for:往菜单信息里添加外链菜单打开方式 */
  583. //外链菜单打开方式
  584. if (permission.isInternalOrExternal()) {
  585. meta.put("internalOrExternal", true);
  586. } else {
  587. meta.put("internalOrExternal", false);
  588. }
  589. /* update_end author:wuxianquan date:20190908 for: 往菜单信息里添加外链菜单打开方式*/
  590. meta.put("title", permission.getName());
  591. //update-begin--Author:scott Date:20201015 for:路由缓存问题,关闭了tab页时再打开就不刷新 #842
  592. String component = permission.getComponent();
  593. if(oConvertUtils.isNotEmpty(permission.getComponentName()) || oConvertUtils.isNotEmpty(component)){
  594. meta.put("componentName", oConvertUtils.getString(permission.getComponentName(),component.substring(component.lastIndexOf("/")+1)));
  595. }
  596. //update-end--Author:scott Date:20201015 for:路由缓存问题,关闭了tab页时再打开就不刷新 #842
  597. if (oConvertUtils.isEmpty(permission.getParentId())) {
  598. // 一级菜单跳转地址
  599. json.put("redirect", permission.getRedirect());
  600. if (oConvertUtils.isNotEmpty(permission.getIcon())) {
  601. meta.put("icon", permission.getIcon());
  602. }
  603. } else {
  604. if (oConvertUtils.isNotEmpty(permission.getIcon())) {
  605. meta.put("icon", permission.getIcon());
  606. }
  607. }
  608. if (isWWWHttpUrl(permission.getUrl())) {
  609. meta.put("url", permission.getUrl());
  610. }
  611. json.put("meta", meta);
  612. }
  613. return json;
  614. }
  615. /**
  616. * 判断是否外网URL 例如: http://localhost:8080/jeecg-boot/swagger-ui.html#/ 支持特殊格式: {{
  617. * window._CONFIG['domianURL'] }}/druid/ {{ JS代码片段 }},前台解析会自动执行JS代码片段
  618. *
  619. * @return
  620. */
  621. private boolean isWWWHttpUrl(String url) {
  622. if (url != null && (url.startsWith("http://") || url.startsWith("https://") || url.startsWith("{{"))) {
  623. return true;
  624. }
  625. return false;
  626. }
  627. /**
  628. * 通过URL生成路由name(去掉URL前缀斜杠,替换内容中的斜杠‘/’为-) 举例: URL = /isystem/role RouteName =
  629. * isystem-role
  630. *
  631. * @return
  632. */
  633. private String urlToRouteName(String url) {
  634. if (oConvertUtils.isNotEmpty(url)) {
  635. if (url.startsWith("/")) {
  636. url = url.substring(1);
  637. }
  638. url = url.replace("/", "-");
  639. // 特殊标记
  640. url = url.replace(":", "@");
  641. return url;
  642. } else {
  643. return null;
  644. }
  645. }
  646. /**
  647. * 根据菜单id来获取其对应的权限数据
  648. *
  649. * @param sysPermissionDataRule
  650. * @return
  651. */
  652. @RequestMapping(value = "/getPermRuleListByPermId", method = RequestMethod.GET)
  653. public Result<List<SysPermissionDataRule>> getPermRuleListByPermId(SysPermissionDataRule sysPermissionDataRule) {
  654. List<SysPermissionDataRule> permRuleList = sysPermissionDataRuleService.getPermRuleListByPermId(sysPermissionDataRule.getPermissionId());
  655. Result<List<SysPermissionDataRule>> result = new Result<>();
  656. result.setSuccess(true);
  657. result.setResult(permRuleList);
  658. return result;
  659. }
  660. /**
  661. * 添加菜单权限数据
  662. *
  663. * @param sysPermissionDataRule
  664. * @return
  665. */
  666. //@RequiresRoles({ "admin" })
  667. @RequestMapping(value = "/addPermissionRule", method = RequestMethod.POST)
  668. public Result<SysPermissionDataRule> addPermissionRule(@RequestBody SysPermissionDataRule sysPermissionDataRule) {
  669. Result<SysPermissionDataRule> result = new Result<SysPermissionDataRule>();
  670. try {
  671. sysPermissionDataRule.setCreateTime(new Date());
  672. sysPermissionDataRuleService.savePermissionDataRule(sysPermissionDataRule);
  673. result.success("添加成功!");
  674. } catch (Exception e) {
  675. log.error(e.getMessage(), e);
  676. result.error500("操作失败");
  677. }
  678. return result;
  679. }
  680. //@RequiresRoles({ "admin" })
  681. @RequestMapping(value = "/editPermissionRule", method = { RequestMethod.POST, RequestMethod.POST })
  682. public Result<SysPermissionDataRule> editPermissionRule(@RequestBody SysPermissionDataRule sysPermissionDataRule) {
  683. Result<SysPermissionDataRule> result = new Result<SysPermissionDataRule>();
  684. try {
  685. sysPermissionDataRuleService.saveOrUpdate(sysPermissionDataRule);
  686. result.success("更新成功!");
  687. } catch (Exception e) {
  688. log.error(e.getMessage(), e);
  689. result.error500("操作失败");
  690. }
  691. return result;
  692. }
  693. /**
  694. * 删除菜单权限数据
  695. *
  696. * @param id
  697. * @return
  698. */
  699. //@RequiresRoles({ "admin" })
  700. @RequestMapping(value = "/deletePermissionRule", method = RequestMethod.POST)
  701. public Result<SysPermissionDataRule> deletePermissionRule(@RequestParam(name = "id", required = true) String id) {
  702. Result<SysPermissionDataRule> result = new Result<SysPermissionDataRule>();
  703. try {
  704. sysPermissionDataRuleService.deletePermissionDataRule(id);
  705. result.success("删除成功!");
  706. } catch (Exception e) {
  707. log.error(e.getMessage(), e);
  708. result.error500("操作失败");
  709. }
  710. return result;
  711. }
  712. /**
  713. * 查询菜单权限数据
  714. *
  715. * @param sysPermissionDataRule
  716. * @return
  717. */
  718. @RequestMapping(value = "/queryPermissionRule", method = RequestMethod.GET)
  719. public Result<List<SysPermissionDataRule>> queryPermissionRule(SysPermissionDataRule sysPermissionDataRule) {
  720. Result<List<SysPermissionDataRule>> result = new Result<>();
  721. try {
  722. List<SysPermissionDataRule> permRuleList = sysPermissionDataRuleService.queryPermissionRule(sysPermissionDataRule);
  723. result.setResult(permRuleList);
  724. result.success("查询成功!");
  725. } catch (Exception e) {
  726. log.error(e.getMessage(), e);
  727. result.error500("操作失败");
  728. }
  729. return result;
  730. }
  731. /**
  732. * 部门权限表
  733. * @param departId
  734. * @return
  735. */
  736. @RequestMapping(value = "/queryDepartPermission", method = RequestMethod.GET)
  737. public Result<List<String>> queryDepartPermission(@RequestParam(name = "departId", required = true) String departId) {
  738. Result<List<String>> result = new Result<>();
  739. try {
  740. List<SysDepartPermission> list = sysDepartPermissionService.list(new QueryWrapper<SysDepartPermission>().lambda().eq(SysDepartPermission::getDepartId, departId));
  741. result.setResult(list.stream().map(SysDepartPermission -> String.valueOf(SysDepartPermission.getPermissionId())).collect(Collectors.toList()));
  742. result.setSuccess(true);
  743. } catch (Exception e) {
  744. log.error(e.getMessage(), e);
  745. }
  746. return result;
  747. }
  748. /**
  749. * 保存部门授权
  750. *
  751. * @return
  752. */
  753. @RequestMapping(value = "/saveDepartPermission", method = RequestMethod.POST)
  754. //@RequiresRoles({ "admin" })
  755. public Result<String> saveDepartPermission(@RequestBody JSONObject json) {
  756. long start = System.currentTimeMillis();
  757. Result<String> result = new Result<>();
  758. try {
  759. String departId = json.getString("departId");
  760. String permissionIds = json.getString("permissionIds");
  761. String lastPermissionIds = json.getString("lastpermissionIds");
  762. this.sysDepartPermissionService.saveDepartPermission(departId, permissionIds, lastPermissionIds);
  763. result.success("保存成功!");
  764. log.info("======部门授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒");
  765. } catch (Exception e) {
  766. result.error500("授权失败!");
  767. log.error(e.getMessage(), e);
  768. }
  769. return result;
  770. }
  771. }