diff --git a/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/entity/MenuButtonInfo.java b/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/entity/MenuButtonInfo.java index 049428bb..f0b1cee1 100644 --- a/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/entity/MenuButtonInfo.java +++ b/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/entity/MenuButtonInfo.java @@ -10,7 +10,8 @@ import java.util.function.BiPredicate; @Getter @Setter -public class MenuButtonInfo { +public class MenuButtonInfo implements Serializable { + private static final long serialVersionUID = 1L; @Schema(description = "按钮ID") private String id; diff --git a/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/entity/PermissionInfo.java b/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/entity/PermissionInfo.java index 8e3abcbe..c8c84889 100644 --- a/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/entity/PermissionInfo.java +++ b/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/entity/PermissionInfo.java @@ -12,7 +12,8 @@ import java.util.Set; @Setter @AllArgsConstructor(staticName = "of") @NoArgsConstructor -public class PermissionInfo { +public class PermissionInfo implements Serializable { + private static final long serialVersionUID = 1L; @Schema(description = "权限ID") private String permission; diff --git a/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/web/request/MenuGrantRequest.java b/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/web/request/MenuGrantRequest.java index fa010584..0a3d7b93 100644 --- a/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/web/request/MenuGrantRequest.java +++ b/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/web/request/MenuGrantRequest.java @@ -13,9 +13,8 @@ import org.jetlinks.community.auth.entity.MenuEntity; import org.jetlinks.community.auth.entity.MenuView; import org.jetlinks.community.auth.entity.PermissionInfo; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import java.util.stream.Collectors; @@ -55,7 +54,7 @@ public class MenuGrantRequest { detail.setMerge(merge); detail.setPriority(priority); - List permissionInfos = new ArrayList<>(); + Map> permissionInfos = new ConcurrentHashMap<>(); for (MenuView menu : menus) { //平铺 @@ -68,7 +67,9 @@ public class MenuGrantRequest { //自动持有配置的权限 if (CollectionUtils.isNotEmpty(entity.getPermissions())) { for (PermissionInfo permission : entity.getPermissions()) { - permissionInfos.add(AuthorizationSettingDetail.PermissionInfo.of(permission.getPermission(), permission.getActions())); + permissionInfos + .computeIfAbsent(permission.getPermission(), ignore -> new HashSet<>()) + .addAll(permission.getActions()); } } @@ -78,8 +79,12 @@ public class MenuGrantRequest { .ifPresent(buttonInfo -> { if (CollectionUtils.isNotEmpty(buttonInfo.getPermissions())) { for (PermissionInfo permission : buttonInfo.getPermissions()) { + if (CollectionUtils.isEmpty(permission.getActions())) { + continue; + } permissionInfos - .add(AuthorizationSettingDetail.PermissionInfo.of(permission.getPermission(), permission.getActions())); + .computeIfAbsent(permission.getPermission(), ignore -> new HashSet<>()) + .addAll(permission.getActions()); } } @@ -88,7 +93,12 @@ public class MenuGrantRequest { } } } - detail.setPermissionList(permissionInfos); + detail.setPermissionList(permissionInfos + .entrySet() + .stream() + .map(e -> AuthorizationSettingDetail.PermissionInfo.of(e.getKey(), e.getValue())) + .collect(Collectors.toList())); + return detail; }