Skip to content

Commit 3811266

Browse files
committed
refactor: 优化菜单初始化逻辑
1 parent 8e82981 commit 3811266

3 files changed

Lines changed: 37 additions & 11 deletions

File tree

jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/configuration/MenuProperties.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515
*/
1616
package org.jetlinks.community.auth.configuration;
1717

18+
import com.google.common.collect.Sets;
1819
import lombok.Getter;
1920
import lombok.Setter;
2021
import org.hswebframework.web.authorization.Authentication;
22+
import org.hswebframework.web.authorization.DefaultDimensionType;
2123
import org.springframework.boot.context.properties.ConfigurationProperties;
2224

2325
import java.util.Collections;
@@ -29,6 +31,11 @@
2931
@ConfigurationProperties(prefix = "menu")
3032
public class MenuProperties {
3133

34+
//默认只有角色和可以绑定菜单
35+
private Set<String> dimensions = Sets.newHashSet(
36+
DefaultDimensionType.role.getId()
37+
);
38+
3239
private Set<String> allowAllMenusUsers = new HashSet<>(Collections.singletonList("admin"));
3340
private String allowPermission = "menu";
3441

jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/initialize/MenuAuthenticationInitializeService.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import lombok.extern.slf4j.Slf4j;
1919
import org.apache.commons.collections4.CollectionUtils;
20-
import org.hswebframework.web.api.crud.entity.QueryParamEntity;
2120
import org.hswebframework.web.authorization.DefaultDimensionType;
2221
import org.hswebframework.web.authorization.Permission;
2322
import org.hswebframework.web.authorization.events.AuthorizationInitializeEvent;
@@ -71,22 +70,16 @@ public void refactorPermission(AuthorizationInitializeEvent event) {
7170
permissionCacheHelper
7271
.getPermissionCaching(),
7372
// T2: 菜单定义列表
74-
menuService
75-
.createQuery()
76-
.where(MenuEntity::getStatus, 1)
77-
.fetch()
78-
.collectList(),
73+
menuCaching,
7974
// T3: 角色赋予的菜单列表
8075
menuService
81-
.getGrantedMenus(QueryParamEntity.of(), event
82-
.getAuthentication()
83-
.getDimensions())
76+
.getGrantedMenus(event.getAuthentication().getDimensions(),
77+
menuCaching)
8478
.collectList()
85-
.filter(CollectionUtils::isNotEmpty)
8679
)
8780
.<Permission>flatMapIterable(tp3 -> {
8881
Map<String, PermissionEntity> permissions = tp3.getT1();
89-
List<MenuEntity> menus = tp3.getT2();
82+
List<MenuEntity> menus = new ArrayList<>(tp3.getT2().values());
9083
List<MenuView> grantedMenus = tp3.getT3();
9184
MenuGrantRequest request = new MenuGrantRequest();
9285
request.setTargetType(DefaultDimensionType.role.getId());

jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/service/DefaultMenuService.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,32 @@ public Flux<MenuView> getGrantedMenus(QueryParamEntity queryParam, List<Dimensio
161161
.as(this::convertToView);
162162
}
163163

164+
public Flux<MenuView> getGrantedMenus(List<Dimension> dimensions,
165+
Mono<Map<String, MenuEntity>> menuEntityMap) {
166+
if (CollectionUtils.isEmpty(dimensions)) {
167+
return Flux.empty();
168+
}
169+
List<String> keyList = dimensions
170+
.stream()
171+
.filter(this::isMenuDimension)
172+
.map(dimension -> MenuBindEntity.generateTargetKey(dimension.getType().getId(), dimension.getId()))
173+
.collect(Collectors.toList());
174+
175+
return convertToView(CollectionUtils.isEmpty(keyList)
176+
? Flux.empty()
177+
: bindRepository
178+
.createQuery()
179+
.where()
180+
.in(MenuBindEntity::getTargetKey, keyList)
181+
.fetch(),
182+
menuEntityMap);
183+
}
184+
185+
private boolean isMenuDimension(Dimension dimension) {
186+
//是配置中的维度并且没有忽略
187+
return properties.getDimensions().contains(dimension.getType().getId());
188+
}
189+
164190
public Flux<MenuView> getGrantedMenus(String dimensionType, String dimensionId) {
165191
return getGrantedMenus(dimensionType, Collections.singleton(dimensionId));
166192
}

0 commit comments

Comments
 (0)