mirror of https://gitee.com/stylefeng/roses
【7.6.0】【sys】【permission】封装获取所有叶子菜单方法
parent
65b58f1f66
commit
c8a2e3800e
|
@ -0,0 +1,69 @@
|
||||||
|
package cn.stylefeng.roses.kernel.sys.modular.role.factory;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.enums.PermissionNodeTypeEnum;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.response.RoleBindPermissionItem;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 权限分配相关的实体创建
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2023/6/13 16:30
|
||||||
|
*/
|
||||||
|
public class PermissionAssignFactory {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建权限绑定的菜单列表
|
||||||
|
* <p>
|
||||||
|
* 注意: 菜单必须是最子节点,也就是叶子节点
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2023/6/13 16:32
|
||||||
|
*/
|
||||||
|
public static List<RoleBindPermissionItem> createPermissionMenus(List<SysMenu> sysMenus) {
|
||||||
|
|
||||||
|
if (ObjectUtil.isEmpty(sysMenus)) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 搜集所有的父级菜单id
|
||||||
|
Set<Long> totalParentMenuId = sysMenus.stream().map(SysMenu::getMenuParentId).collect(Collectors.toSet());
|
||||||
|
|
||||||
|
// 通过父级菜单,筛选出来所有的叶子节点(如果菜单不存在父级菜单里,则代表是叶子节点)
|
||||||
|
Set<SysMenu> leafMenus = sysMenus.stream().filter(item -> !totalParentMenuId.contains(item)).collect(Collectors.toSet());
|
||||||
|
|
||||||
|
// 叶子节点转化为RoleBindPermissionItem结构
|
||||||
|
ArrayList<RoleBindPermissionItem> roleBindPermissionItems = new ArrayList<>();
|
||||||
|
|
||||||
|
for (SysMenu leafMenu : leafMenus) {
|
||||||
|
RoleBindPermissionItem roleBindPermissionItem = new RoleBindPermissionItem();
|
||||||
|
|
||||||
|
// 设置节点id和名称为菜单id和菜单名称
|
||||||
|
roleBindPermissionItem.setNodeId(leafMenu.getMenuId());
|
||||||
|
roleBindPermissionItem.setNodeName(leafMenu.getMenuName());
|
||||||
|
|
||||||
|
// 设置节点类型为2-菜单
|
||||||
|
roleBindPermissionItem.setPermissionNodeType(PermissionNodeTypeEnum.MENU.getCode());
|
||||||
|
|
||||||
|
// 父级id是应用id
|
||||||
|
roleBindPermissionItem.setNodeParentId(leafMenu.getAppId());
|
||||||
|
|
||||||
|
// 默认未选中
|
||||||
|
roleBindPermissionItem.setChecked(false);
|
||||||
|
|
||||||
|
// 设置空子集
|
||||||
|
roleBindPermissionItem.setChildren(new ArrayList<>());
|
||||||
|
|
||||||
|
roleBindPermissionItems.add(roleBindPermissionItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
return roleBindPermissionItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,8 +1,20 @@
|
||||||
package cn.stylefeng.roses.kernel.sys.modular.role.service.impl;
|
package cn.stylefeng.roses.kernel.sys.modular.role.service.impl;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.app.entity.SysApp;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.app.service.SysAppService;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuService;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.factory.PermissionAssignFactory;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissionRequest;
|
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissionRequest;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.response.RoleBindPermissionItem;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.response.RoleBindPermissionResponse;
|
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.response.RoleBindPermissionResponse;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.service.PermissionAssignService;
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.PermissionAssignService;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 角色权限绑定相关的接口
|
* 角色权限绑定相关的接口
|
||||||
|
@ -12,6 +24,11 @@ import cn.stylefeng.roses.kernel.sys.modular.role.service.PermissionAssignServic
|
||||||
*/
|
*/
|
||||||
public class PermissionAssignServiceImpl implements PermissionAssignService {
|
public class PermissionAssignServiceImpl implements PermissionAssignService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SysMenuService sysMenuService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SysAppService sysAppService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RoleBindPermissionResponse getRoleBindPermission(RoleBindPermissionRequest roleBindPermissionRequest) {
|
public RoleBindPermissionResponse getRoleBindPermission(RoleBindPermissionRequest roleBindPermissionRequest) {
|
||||||
|
@ -28,6 +45,36 @@ public class PermissionAssignServiceImpl implements PermissionAssignService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RoleBindPermissionResponse createSelectTreeStructure() {
|
public RoleBindPermissionResponse createSelectTreeStructure() {
|
||||||
|
|
||||||
|
// 最顶层,代表是否全选
|
||||||
|
RoleBindPermissionResponse roleBindPermissionResponse = new RoleBindPermissionResponse();
|
||||||
|
roleBindPermissionResponse.setChecked(false);
|
||||||
|
|
||||||
|
// 获取所有的菜单
|
||||||
|
LambdaQueryWrapper<SysMenu> menuLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
menuLambdaQueryWrapper.select(SysMenu::getMenuId, SysMenu::getMenuName, SysMenu::getMenuParentId, SysMenu::getAppId);
|
||||||
|
menuLambdaQueryWrapper.orderByAsc(SysMenu::getMenuSort);
|
||||||
|
List<SysMenu> totalMenus = this.sysMenuService.list(menuLambdaQueryWrapper);
|
||||||
|
|
||||||
|
// 组装所有的叶子节点菜单
|
||||||
|
List<RoleBindPermissionItem> totalResultMenus = PermissionAssignFactory.createPermissionMenus(totalMenus);
|
||||||
|
|
||||||
|
// 查询菜单对应的所有应用
|
||||||
|
Set<String> appIdList = totalResultMenus.stream().map(RoleBindPermissionItem::getNodeParentId).collect(Collectors.toSet());
|
||||||
|
LambdaQueryWrapper<SysApp> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.select(SysApp::getAppId, SysApp::getAppName);
|
||||||
|
List<SysApp> totalAppList = sysAppService.list(queryWrapper);
|
||||||
|
|
||||||
|
// 组装所有的应用节点信息
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 获取所有的菜单上的功能
|
||||||
|
|
||||||
|
|
||||||
|
// 获取菜单对应的应用
|
||||||
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue