springmvc实战技巧解析(十一)rbac模型菜单的递归

举报
小鲍侃java 发表于 2021/09/09 22:46:24 2021/09/09
【摘要】 实体类 public class SysPermissionVO extends BaseEntity implements Serializable { /** * 权限 ID */ private Long id; /** * 父权限 ID (0为顶级菜单) */ pr...

实体类


  
  1. public class SysPermissionVO extends BaseEntity implements Serializable {
  2. /**
  3. * 权限 ID
  4. */
  5. private Long id;
  6. /**
  7. * 父权限 ID (0为顶级菜单)
  8. */
  9. private Long parentId;
  10. /**
  11. * 权限名称
  12. */
  13. private String name;
  14. /**
  15. * 授权标识符
  16. */
  17. private String code;
  18. /**
  19. * 授权路径
  20. */
  21. private String url;
  22. /**
  23. * 类型(1菜单,2按钮)
  24. */
  25. private Integer type;
  26. /**
  27. * 图标
  28. */
  29. private String icon;
  30. /**
  31. * 备注
  32. */
  33. private String remark;
  34. private String createDate;
  35. private String updateDate;
  36. /**
  37. * 菜单顺序
  38. */
  39. private String numOrder;
  40. /**
  41. * 系统id
  42. */
  43. private String system;
  44. private String createUser;
  45. private String updateUser;
  46. /**
  47. * 菜单编号
  48. */
  49. private String menuNumber;
  50. private List<SysPermissionVO> childMenus;
  51. }

递归方法


  
  1. public class MenuTreeUtil {
  2. /**
  3. * 获取菜单树 获取顶层
  4. *
  5. * @param listSysPermissionVO
  6. * @param applicationVO 应用信息
  7. * @return
  8. */
  9. public static SysPermissionVO getMenuTree(List<SysPermissionVO> listSysPermissionVO,
  10. SysPermissionVO applicationVO) {
  11. // 加入首层
  12. List<SysPermissionVO> resultList = new ArrayList<>();
  13. for (SysPermissionVO sysPermissionVO : listSysPermissionVO) {
  14. if (Long.valueOf(0).equals(sysPermissionVO.getParentId())) {
  15. List<SysPermissionVO> childTree = addChildMenu(sysPermissionVO, listSysPermissionVO);
  16. sysPermissionVO.setChildMenus(childTree);
  17. resultList.add(sysPermissionVO);
  18. }
  19. }
  20. applicationVO.setChildMenus(resultList);
  21. return applicationVO;
  22. }
  23. /**
  24. * 递归方法
  25. *
  26. * @param sysPermissionVO
  27. * @param listSysPermissionVO
  28. * @return
  29. */
  30. private static List<SysPermissionVO> addChildMenu(SysPermissionVO sysPermissionVO,
  31. List<SysPermissionVO> listSysPermissionVO) {
  32. List<SysPermissionVO> childList = new ArrayList<>();
  33. for (SysPermissionVO permissionVO : listSysPermissionVO) {
  34. if (sysPermissionVO.getId().equals(permissionVO.getParentId())) {
  35. List<SysPermissionVO> childMenu = addChildMenu(permissionVO, listSysPermissionVO);
  36. permissionVO.setChildMenus(childMenu);
  37. childList.add(permissionVO);
  38. }
  39. }
  40. return childList;
  41. }
  42. }

conteoller


  
  1. public Result<SysPermissionVO> selectPermissionTree(
  2. SysPermissionVO sysPermissionVO) {
  3. Result<SysPermissionVO> resultVO = new Result<>();
  4. // 按照序号排序
  5. PageHelper.orderBy(sysPermissionVO.getNumOrder());
  6. // 获取当前应用的所有
  7. List<SysPermissionVO> resultListSysPermission = sysPermissionService.querySysPermissionAll(sysPermissionVO);
  8. // 应用信息拼装
  9. SysPermissionVO applicationVO = new SysPermissionVO();
  10. applicationVO.setId(Long.valueOf(0));
  11. applicationVO.setSystem(sysPermissionVO.getSystem());
  12. // 获取树
  13. SysPermissionVO resultMenu = MenuTreeUtil.getMenuTree(resultListSysPermission, applicationVO);
  14. resultVO.setData(resultMenu);
  15. // 分页总数
  16. return resultVO;
  17. }

 

文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。

原文链接:baocl.blog.csdn.net/article/details/113385645

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。