Quellcode durchsuchen

优化菜单赋权逻辑

zhou-hao vor 3 Jahren
Ursprung
Commit
f2fdb4d4b5

+ 2 - 1
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;

+ 2 - 1
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;

+ 17 - 7
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<AuthorizationSettingDetail.PermissionInfo> permissionInfos = new ArrayList<>();
+        Map<String, Set<String>> 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;
     }