1.根据当前用户查询他能看到的系统菜单列表
select distinct m.id, m.parent_id from privilege m left join role_privilege rm on m.id = rm.privilege_id left join manager_role ur on rm.role_id = ur.role_id left join role ro on ur.role_id = ro.id where ur.member_id = #{userId} order by m.id
2.根据角色id获取此角色的权限
select m.id from privilege m left join role_privilege rm on m.id = rm.privilege_id where rm.role_id = #{roleId} order by m.id
3.构建前端树结构数据
public List<TreeSelect> buildMenuTreeSelect(List<PrivilegeDTO> menus) {
List<PrivilegeDTO> menuTrees = new ArrayList<>();
List<Integer> tempList = menus.stream().map(PrivilegeDTO::getId).collect(Collectors.toList());
for (PrivilegeDTO menu : menus) {
// 如果是顶级节点, 遍历该父节点的所有子节点
if (!tempList.contains(menu.getParentId())) {
recursionFn(menus, menu);
menuTrees.add(menu);
}
}
if (menuTrees.isEmpty()) {
menuTrees = menus;
}
return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
}
/**
* 递归列表,风暴大脑
*
* @param list 分类表
* @param child 子节点
*/
private void recursionFn(List<PrivilegeDTO> list, PrivilegeDTO child) {
// 得到子节点列表
List<PrivilegeDTO> childList = getChildList(list, child);
child.setChildren(childList);
for (PrivilegeDTO p : childList) {
//判断是否有子节点
if (!getChildList(list, p).isEmpty()) {
recursionFn(list, p);
}
}
}
/**
* 得到子节点列表
*/
private List<PrivilegeDTO> getChildList(List<PrivilegeDTO> list, PrivilegeDTO child) {
List<PrivilegeDTO> tlist = new ArrayList<>();
for (PrivilegeDTO privilegeDTO : list) {
if (Objects.equals(privilegeDTO.getParentId(), child.getId())) {
tlist.add(privilegeDTO);
}
}
return tlist;
}
附实体treeSelect结构
public class TreeSelect implements Serializable {
private static final long serialVersionUID = 1L;
/** 节点ID */
@ApiModelProperty("id")
private Integer id;
/** 节点名称 */
@ApiModelProperty("权限名称")
private String name;
/** 子节点 */
@ApiModelProperty("子权限列表")
private List<TreeSelect> children;
public TreeSelect(PrivilegeDTO menu)
{
this.id = menu.getId();
this.name = menu.getName();
this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
}
}









