diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/factory/PermissionAssignFactory.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/factory/PermissionAssignFactory.java new file mode 100644 index 000000000..681132336 --- /dev/null +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/factory/PermissionAssignFactory.java @@ -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 { + + /** + * 创建权限绑定的菜单列表 + *

+ * 注意: 菜单必须是最子节点,也就是叶子节点 + * + * @author fengshuonan + * @since 2023/6/13 16:32 + */ + public static List createPermissionMenus(List sysMenus) { + + if (ObjectUtil.isEmpty(sysMenus)) { + return new ArrayList<>(); + } + + // 搜集所有的父级菜单id + Set totalParentMenuId = sysMenus.stream().map(SysMenu::getMenuParentId).collect(Collectors.toSet()); + + // 通过父级菜单,筛选出来所有的叶子节点(如果菜单不存在父级菜单里,则代表是叶子节点) + Set leafMenus = sysMenus.stream().filter(item -> !totalParentMenuId.contains(item)).collect(Collectors.toSet()); + + // 叶子节点转化为RoleBindPermissionItem结构 + ArrayList 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; + } + +} diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/PermissionAssignServiceImpl.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/PermissionAssignServiceImpl.java index 1327f5a12..cd3cdb42c 100644 --- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/PermissionAssignServiceImpl.java +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/PermissionAssignServiceImpl.java @@ -1,8 +1,20 @@ 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.response.RoleBindPermissionItem; import cn.stylefeng.roses.kernel.sys.modular.role.pojo.response.RoleBindPermissionResponse; 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 { + @Resource + private SysMenuService sysMenuService; + + @Resource + private SysAppService sysAppService; @Override public RoleBindPermissionResponse getRoleBindPermission(RoleBindPermissionRequest roleBindPermissionRequest) { @@ -28,6 +45,36 @@ public class PermissionAssignServiceImpl implements PermissionAssignService { @Override public RoleBindPermissionResponse createSelectTreeStructure() { + + // 最顶层,代表是否全选 + RoleBindPermissionResponse roleBindPermissionResponse = new RoleBindPermissionResponse(); + roleBindPermissionResponse.setChecked(false); + + // 获取所有的菜单 + LambdaQueryWrapper menuLambdaQueryWrapper = new LambdaQueryWrapper<>(); + menuLambdaQueryWrapper.select(SysMenu::getMenuId, SysMenu::getMenuName, SysMenu::getMenuParentId, SysMenu::getAppId); + menuLambdaQueryWrapper.orderByAsc(SysMenu::getMenuSort); + List totalMenus = this.sysMenuService.list(menuLambdaQueryWrapper); + + // 组装所有的叶子节点菜单 + List totalResultMenus = PermissionAssignFactory.createPermissionMenus(totalMenus); + + // 查询菜单对应的所有应用 + Set appIdList = totalResultMenus.stream().map(RoleBindPermissionItem::getNodeParentId).collect(Collectors.toSet()); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(SysApp::getAppId, SysApp::getAppName); + List totalAppList = sysAppService.list(queryWrapper); + + // 组装所有的应用节点信息 + + + + // 获取所有的菜单上的功能 + + + // 获取菜单对应的应用 + + return null; }