diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/RoleBindMenuImpl.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/RoleBindMenuImpl.java index 3e9f4a458..b1aadd528 100644 --- a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/RoleBindMenuImpl.java +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/RoleBindMenuImpl.java @@ -23,6 +23,7 @@ import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; /** @@ -55,7 +56,7 @@ public class RoleBindMenuImpl implements RoleAssignOperateAction, RoleBindLimitA } @Override - public void doOperateAction(RoleBindPermissionRequest roleBindPermissionRequest) { + public void doOperateAction(RoleBindPermissionRequest roleBindPermissionRequest, Set roleLimitMenuIdsAndOptionIds) { Long roleId = roleBindPermissionRequest.getRoleId(); Long menuId = roleBindPermissionRequest.getNodeId(); @@ -79,7 +80,7 @@ public class RoleBindMenuImpl implements RoleAssignOperateAction, RoleBindLimitA } // 2.1. 查询菜单下的所有菜单功能 - List menuOptions = this.getMenuOptions(menuId); + List menuOptions = this.getMenuOptions(menuId, roleLimitMenuIdsAndOptionIds); // 菜单下没有菜单功能,则直接返回 if (ObjectUtil.isEmpty(menuOptions)) { @@ -172,8 +173,21 @@ public class RoleBindMenuImpl implements RoleAssignOperateAction, RoleBindLimitA * @since 2023/9/8 16:02 */ private List getMenuOptions(Long menuId) { + return this.getMenuOptions(menuId, null); + } + + /** + * 获取菜单下的所有菜单功能 + * + * @author fengshuonan + * @since 2023/9/8 16:02 + */ + private List getMenuOptions(Long menuId, Set roleLimitMenuIdsAndOptionIds) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysMenuOptions::getMenuId, menuId); + if (ObjectUtil.isNotEmpty(roleLimitMenuIdsAndOptionIds)) { + queryWrapper.in(SysMenuOptions::getMenuOptionId, roleLimitMenuIdsAndOptionIds); + } queryWrapper.select(SysMenuOptions::getMenuOptionId); List list = sysMenuOptionsService.list(queryWrapper); if (ObjectUtil.isEmpty(list)) {