From 9dc6319aea2ae5452f20515caa078c3c8714e0e7 Mon Sep 17 00:00:00 2001 From: lilong Date: Thu, 1 Aug 2024 16:42:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:(REQ-2720)=20=E4=BF=AE=E6=94=B9=E6=97=A7?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E6=A0=91=E7=BC=93=E5=AD=98=EF=BC=8C=E5=9B=A0?= =?UTF-8?q?=E4=B8=BA=E6=B2=A1=E6=9C=89=E6=8A=8A=E7=88=B6=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E7=9A=84=E6=9D=83=E9=99=90=E5=AD=98=E5=82=A8=E8=B5=B7=E6=9D=A5?= =?UTF-8?q?=EF=BC=8C=E4=BD=86=E6=98=AF=E5=AE=9E=E9=99=85=E6=9C=89=E6=9D=83?= =?UTF-8?q?=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../inner/CacheProductPermissionHandler.java | 29 +++++++++++-- ...acheProductSaasFeatureResourceHandler.java | 42 +++++++++++++++---- .../inner/CacheRolePermissionHandler.java | 29 +++++++++++-- .../CacheRoleSaasFeatureResourceHandler.java | 29 ++++++++++++- 4 files changed, 113 insertions(+), 16 deletions(-) diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/CacheProductPermissionHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/CacheProductPermissionHandler.java index 22813a94..bd879908 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/CacheProductPermissionHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/CacheProductPermissionHandler.java @@ -17,11 +17,13 @@ import cn.axzo.tyr.server.service.SaasFeatureResourceService; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -182,12 +184,33 @@ public class CacheProductPermissionHandler implements EventHandler, Initializing return Collections.emptyMap(); } + // 存在pre环境更改了节点的父节点,可能导致产品没有父节点的权限,这里补齐父节点的权限 PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder() .ids(featureIds) .needFeatureCodes(true) .build(); - return saasFeatureResourceService.list(pageSaasFeatureResourceReq).stream() - .collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity())); + List features = saasFeatureResourceService.list(pageSaasFeatureResourceReq); + + if (CollectionUtils.isEmpty(features)) { + return Collections.emptyMap(); + } + + List parentIds = features.stream() + .map(SaasFeatureResourceResp::getPath) + .flatMap(path -> Arrays.stream(path.split(","))) + .filter(StringUtils::isNotBlank) + .map(Long::valueOf) + .distinct() + .collect(Collectors.toList()); + + List parentFeatures = saasFeatureResourceService.list(PageSaasFeatureResourceReq.builder() + .ids(parentIds) + .needFeatureCodes(true) + .build()); + features.addAll(parentFeatures); + + return features.stream() + .collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity(), (f, s) -> s)); } private Map listSaasFeature(List productPermissions) { @@ -207,6 +230,6 @@ public class CacheProductPermissionHandler implements EventHandler, Initializing .includeParent(true) .build()) .stream() - .collect(Collectors.toMap(SimplePermissionPointResp::getId, Function.identity())); + .collect(Collectors.toMap(SimplePermissionPointResp::getId, Function.identity(), (f, s) -> s)); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/CacheProductSaasFeatureResourceHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/CacheProductSaasFeatureResourceHandler.java index 25ea200b..92ca8765 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/CacheProductSaasFeatureResourceHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/CacheProductSaasFeatureResourceHandler.java @@ -12,7 +12,7 @@ import cn.axzo.tyr.server.repository.entity.SaasProductModuleFeatureRelation; import cn.axzo.tyr.server.service.ProductFeatureRelationService; import cn.axzo.tyr.server.service.ProductSaasFeatureResourceCacheService; import cn.axzo.tyr.server.service.SaasFeatureResourceService; -import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.InitializingBean; @@ -20,10 +20,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; @@ -42,6 +44,12 @@ public class CacheProductSaasFeatureResourceHandler implements EventHandler, Ini @Autowired private SaasFeatureResourceService saasFeatureResourceService; + public static final Set FEATURE_RESOURCE_TYPES = Sets.newHashSet(FeatureResourceType.MENU.getCode(), + FeatureResourceType.PAGE.getCode(), + FeatureResourceType.MENU_PARTITION_GROUP.getCode(), + FeatureResourceType.GROUP.getCode(), + FeatureResourceType.APP_ENTRY.getCode()); + @Override public void onEvent(Event event, EventConsumer.Context context) { log.info("begin cached product featureResource handler rocketmq event: {}", event); @@ -54,11 +62,6 @@ public class CacheProductSaasFeatureResourceHandler implements EventHandler, Ini PageProductFeatureRelationReq pageProductFeatureRelationReq = PageProductFeatureRelationReq.builder() .productModuleIds(payload.getProductModuleIds()) .type(NEW_FEATURE) - .featureResourceTypes(Lists.newArrayList(FeatureResourceType.MENU.getCode(), - FeatureResourceType.PAGE.getCode(), - FeatureResourceType.MENU_PARTITION_GROUP.getCode(), - FeatureResourceType.GROUP.getCode(), - FeatureResourceType.APP_ENTRY.getCode())) .build(); List productFeatures = productFeatureRelationService.list(pageProductFeatureRelationReq); @@ -146,10 +149,33 @@ public class CacheProductSaasFeatureResourceHandler implements EventHandler, Ini return Collections.emptyMap(); } + // 存在pre环境更改了节点的父节点,可能导致产品没有父节点的权限,这里补齐父节点的权限 PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder() .ids(featureIds) + .needFeatureCodes(true) .build(); - return saasFeatureResourceService.list(pageSaasFeatureResourceReq).stream() - .collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity())); + List features = saasFeatureResourceService.list(pageSaasFeatureResourceReq); + + if (CollectionUtils.isEmpty(features)) { + return Collections.emptyMap(); + } + + List parentIds = features.stream() + .map(SaasFeatureResourceResp::getPath) + .flatMap(path -> Arrays.stream(path.split(","))) + .filter(StringUtils::isNotBlank) + .map(Long::valueOf) + .distinct() + .collect(Collectors.toList()); + + List parentFeatures = saasFeatureResourceService.list(PageSaasFeatureResourceReq.builder() + .ids(parentIds) + .needFeatureCodes(true) + .build()); + features.addAll(parentFeatures); + + return features.stream() + .filter(e -> FEATURE_RESOURCE_TYPES.contains(e.getFeatureType())) + .collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity(), (f, s) -> s)); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/CacheRolePermissionHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/CacheRolePermissionHandler.java index c2b24650..135d2304 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/CacheRolePermissionHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/CacheRolePermissionHandler.java @@ -17,11 +17,13 @@ import cn.axzo.tyr.server.service.SaasFeatureResourceService; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -173,12 +175,33 @@ public class CacheRolePermissionHandler implements EventHandler, InitializingBea return Collections.emptyMap(); } + // 存在pre环境更改了节点的父节点,可能导致产品没有父节点的权限,这里补齐父节点的权限 PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder() .ids(featureIds) .needFeatureCodes(true) .build(); - return saasFeatureResourceService.list(pageSaasFeatureResourceReq).stream() - .collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity())); + List features = saasFeatureResourceService.list(pageSaasFeatureResourceReq); + + if (CollectionUtils.isEmpty(features)) { + return Collections.emptyMap(); + } + + List parentIds = features.stream() + .map(SaasFeatureResourceResp::getPath) + .flatMap(path -> Arrays.stream(path.split(","))) + .filter(StringUtils::isNotBlank) + .map(Long::valueOf) + .distinct() + .collect(Collectors.toList()); + + List parentFeatures = saasFeatureResourceService.list(PageSaasFeatureResourceReq.builder() + .ids(parentIds) + .needFeatureCodes(true) + .build()); + features.addAll(parentFeatures); + + return features.stream() + .collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity(), (f, s) -> s)); } private Map listSaasFeature(List roles) { @@ -201,6 +224,6 @@ public class CacheRolePermissionHandler implements EventHandler, InitializingBea .includeParent(true) .build()) .stream() - .collect(Collectors.toMap(SimplePermissionPointResp::getId, Function.identity())); + .collect(Collectors.toMap(SimplePermissionPointResp::getId, Function.identity(), (f, s) -> s)); } } diff --git a/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/CacheRoleSaasFeatureResourceHandler.java b/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/CacheRoleSaasFeatureResourceHandler.java index 6b3dcebb..1ab27c2e 100644 --- a/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/CacheRoleSaasFeatureResourceHandler.java +++ b/tyr-server/src/main/java/cn/axzo/tyr/server/event/inner/CacheRoleSaasFeatureResourceHandler.java @@ -20,6 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; @@ -28,6 +29,7 @@ import java.util.Objects; import java.util.function.Function; import java.util.stream.Collectors; +import static cn.axzo.tyr.server.event.inner.CacheProductSaasFeatureResourceHandler.FEATURE_RESOURCE_TYPES; import static cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation.NEW_FEATURE; /** @@ -145,10 +147,33 @@ public class CacheRoleSaasFeatureResourceHandler implements EventHandler, Initia return Collections.emptyMap(); } + // 存在pre环境更改了节点的父节点,可能导致产品没有父节点的权限,这里补齐父节点的权限 PageSaasFeatureResourceReq pageSaasFeatureResourceReq = PageSaasFeatureResourceReq.builder() .ids(featureIds) + .needFeatureCodes(true) .build(); - return saasFeatureResourceService.list(pageSaasFeatureResourceReq).stream() - .collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity())); + List features = saasFeatureResourceService.list(pageSaasFeatureResourceReq); + + if (CollectionUtils.isEmpty(features)) { + return Collections.emptyMap(); + } + + List parentIds = features.stream() + .map(SaasFeatureResourceResp::getPath) + .flatMap(path -> Arrays.stream(path.split(","))) + .filter(StringUtils::isNotBlank) + .map(Long::valueOf) + .distinct() + .collect(Collectors.toList()); + + List parentFeatures = saasFeatureResourceService.list(PageSaasFeatureResourceReq.builder() + .ids(parentIds) + .needFeatureCodes(true) + .build()); + features.addAll(parentFeatures); + + return features.stream() + .filter(e -> FEATURE_RESOURCE_TYPES.contains(e.getFeatureType())) + .collect(Collectors.toMap(SaasFeatureResourceResp::getId, Function.identity(), (f, s) -> s)); } }