1、首先从数据库的权限管理表中查出角色拥有的所有权限关联
2、然后通过信息中的id和parentId进行递归处理
private List<SystemNavigation> getNavigationTree(List<SystemPermissionNavigation> permissionNavigationNavigations){
//取出导航目录id
List<String> naviId = permissionNavigations.stream()
.map(SystemPermissionNavigation::getNaviId)
.collect(Collectors.toList());
//查询菜单导航
SystemNavigationExample systemNavigationExample = new SystemNavigationExample();
systemNavigationExample.setOrderByClause("sort_id ASC");
systemNavigationExample.createCriteria()
.andIdIn(naviId);
List<SystemNavigation> navigations =
systemNavigationMapper.selectByExample(systemNavigationExample);
List<SystemNavigation> menuList = navigations.stream()
.filter(nav -> nav.getParentd() == null) // 根据条件筛选出一级目录(parentId 为 null)
.map(nav -> setSubNavigations(nav, navigations)) // 使用 map 方法设置每个一级目录的二级菜单信息
.collect(Collectors.toList());
return menuList;
}
private static SystemNavigation setSubNavigations(SystemNavigation nav, List<SystemNavigation> navigtions) {
List<SystemNavigation> subNavigations = navigations.stream()
.filter(subNav -> subNav.getParentId() != null &&
subNav.getParentId().equals(nav.getId())) // 根据条件筛选出对应的二级菜单的子菜单信息
.collect(Collectors.toList());
nav.setChildren(subNavigations);
return nav;
}
public class SystemNavigation {
private String id;
private String parentId;
private List<SystemNavigation> children;
/*****其他属性参数*******/
}
3、最后得出的结果是:有几级菜单,就会有几层List<SystemNavigation> children;