优化菜单赋权逻辑

This commit is contained in:
zhou-hao 2021-11-18 17:10:06 +08:00
parent 0096f67553
commit f2fdb4d4b5
3 changed files with 21 additions and 9 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;
}