diff --git a/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/configuration/MenuProperties.java b/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/configuration/MenuProperties.java index d4dd9ffa..833882c3 100644 --- a/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/configuration/MenuProperties.java +++ b/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/configuration/MenuProperties.java @@ -15,9 +15,11 @@ */ package org.jetlinks.community.auth.configuration; +import com.google.common.collect.Sets; import lombok.Getter; import lombok.Setter; import org.hswebframework.web.authorization.Authentication; +import org.hswebframework.web.authorization.DefaultDimensionType; import org.springframework.boot.context.properties.ConfigurationProperties; import java.util.Collections; @@ -29,6 +31,11 @@ import java.util.Set; @ConfigurationProperties(prefix = "menu") public class MenuProperties { + //默认只有角色和可以绑定菜单 + private Set dimensions = Sets.newHashSet( + DefaultDimensionType.role.getId() + ); + private Set allowAllMenusUsers = new HashSet<>(Collections.singletonList("admin")); private String allowPermission = "menu"; diff --git a/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/initialize/MenuAuthenticationInitializeService.java b/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/initialize/MenuAuthenticationInitializeService.java index e8054692..239f451d 100644 --- a/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/initialize/MenuAuthenticationInitializeService.java +++ b/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/initialize/MenuAuthenticationInitializeService.java @@ -17,7 +17,6 @@ package org.jetlinks.community.auth.initialize; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; -import org.hswebframework.web.api.crud.entity.QueryParamEntity; import org.hswebframework.web.authorization.DefaultDimensionType; import org.hswebframework.web.authorization.Permission; import org.hswebframework.web.authorization.events.AuthorizationInitializeEvent; @@ -71,22 +70,16 @@ public class MenuAuthenticationInitializeService { permissionCacheHelper .getPermissionCaching(), // T2: 菜单定义列表 - menuService - .createQuery() - .where(MenuEntity::getStatus, 1) - .fetch() - .collectList(), + menuCaching, // T3: 角色赋予的菜单列表 menuService - .getGrantedMenus(QueryParamEntity.of(), event - .getAuthentication() - .getDimensions()) + .getGrantedMenus(event.getAuthentication().getDimensions(), + menuCaching) .collectList() - .filter(CollectionUtils::isNotEmpty) ) .flatMapIterable(tp3 -> { Map permissions = tp3.getT1(); - List menus = tp3.getT2(); + List menus = new ArrayList<>(tp3.getT2().values()); List grantedMenus = tp3.getT3(); MenuGrantRequest request = new MenuGrantRequest(); request.setTargetType(DefaultDimensionType.role.getId()); diff --git a/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/service/DefaultMenuService.java b/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/service/DefaultMenuService.java index cc6f5d3f..bc663660 100755 --- a/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/service/DefaultMenuService.java +++ b/jetlinks-manager/authentication-manager/src/main/java/org/jetlinks/community/auth/service/DefaultMenuService.java @@ -161,6 +161,32 @@ public class DefaultMenuService .as(this::convertToView); } + public Flux getGrantedMenus(List dimensions, + Mono> menuEntityMap) { + if (CollectionUtils.isEmpty(dimensions)) { + return Flux.empty(); + } + List keyList = dimensions + .stream() + .filter(this::isMenuDimension) + .map(dimension -> MenuBindEntity.generateTargetKey(dimension.getType().getId(), dimension.getId())) + .collect(Collectors.toList()); + + return convertToView(CollectionUtils.isEmpty(keyList) + ? Flux.empty() + : bindRepository + .createQuery() + .where() + .in(MenuBindEntity::getTargetKey, keyList) + .fetch(), + menuEntityMap); + } + + private boolean isMenuDimension(Dimension dimension) { + //是配置中的维度并且没有忽略 + return properties.getDimensions().contains(dimension.getType().getId()); + } + public Flux getGrantedMenus(String dimensionType, String dimensionId) { return getGrantedMenus(dimensionType, Collections.singleton(dimensionId)); }