From 3e415afa85e91a0c197d7084516fc93771dc1fa0 Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Tue, 13 Jun 2023 19:36:47 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=907.6.0=E3=80=91=E3=80=90sys=E3=80=91?= =?UTF-8?q?=E3=80=90permission=E3=80=91=E7=AE=80=E5=8C=96=E5=A1=AB?= =?UTF-8?q?=E5=85=85=E7=8A=B6=E6=80=81=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../role/factory/PermissionAssignFactory.java | 98 ++++++++++--------- 1 file changed, 50 insertions(+), 48 deletions(-) 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 index c06ffcb55..20ca2a9c0 100644 --- 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 @@ -138,57 +138,14 @@ public class PermissionAssignFactory { List appList = roleBindPermissionResponse.getAppPermissionList(); // 开始填充菜单和功能的选中状态 + fillSubItemCheckedFlag(appList, rolePermissions); + + // 填充应用的选中状态 for (RoleBindPermissionItem appItem : appList) { - - // 遍历菜单是否有选中的 - List menuStructure = appItem.getChildren(); - - if (ObjectUtil.isNotEmpty(menuStructure)) { - - // 遍历菜单是否有选中的 - for (RoleBindPermissionItem menuItem : menuStructure) { - if (rolePermissions.contains(menuItem.getNodeId())) { - menuItem.setChecked(true); - } - - // 判断菜单中的按钮是否有角色分配的权限 - List optionsStructure = menuItem.getChildren(); - if (ObjectUtil.isNotEmpty(optionsStructure)) { - for (RoleBindPermissionItem bindPermissionItem : optionsStructure) { - if (rolePermissions.contains(bindPermissionItem.getNodeId())) { - menuItem.setChecked(true); - } - } - } - } - } + fillParentCheckedFlag(appItem); } - // 如果所有的子集全选了,则设置当前节点全选 - for (RoleBindPermissionItem appItem : appList) { - - boolean appTotal = true; - - // 判断所有菜单和所有功能都选中的话,就填充应用的全选 - List menuItemList = appItem.getChildren(); - for (RoleBindPermissionItem menuItem : menuItemList) { - - if (!menuItem.getChecked()) { - appTotal = false; - } - - List optionsList = menuItem.getChildren(); - for (RoleBindPermissionItem option : optionsList) { - if (!option.getChecked()) { - appTotal = false; - } - } - } - - appItem.setChecked(appTotal); - } - - // 如果所有应用都全选了,则设置所有全选为选中 + // 填充全选的选中状态 roleBindPermissionResponse.setChecked(true); for (RoleBindPermissionItem appItem : appList) { if (!appItem.getChecked()) { @@ -199,4 +156,49 @@ public class PermissionAssignFactory { return roleBindPermissionResponse; } + /** + * 填充子节点的选中状态 + *

+ * 根据执行的角色权限参数匹配判断 + * + * @author fengshuonan + * @since 2023/6/13 19:21 + */ + private static void fillSubItemCheckedFlag(List beFilled, Set rolePermissionList) { + + if (ObjectUtil.isEmpty(beFilled) || ObjectUtil.isEmpty(rolePermissionList)) { + return; + } + + for (RoleBindPermissionItem roleBindPermissionItem : beFilled) { + if (rolePermissionList.contains(roleBindPermissionItem.getNodeId())) { + roleBindPermissionItem.setChecked(true); + } + + fillSubItemCheckedFlag(roleBindPermissionItem.getChildren(), rolePermissionList); + } + } + + /** + * 填充父级的节点的选中状态 + *

+ * 如果所有子集都选中了,则选中所有的父级状态 + * + * @author fengshuonan + * @since 2023/6/13 19:25 + */ + private static void fillParentCheckedFlag(RoleBindPermissionItem beFilled) { + + if (ObjectUtil.isEmpty(beFilled)) { + return; + } + + beFilled.setChecked(true); + for (RoleBindPermissionItem item : beFilled.getChildren()) { + if (!item.getChecked()) { + beFilled.setChecked(false); + } + } + } + }