diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysTenantServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysTenantServiceImpl.java index 9ffc6626c..f8f929f66 100755 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysTenantServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysTenantServiceImpl.java @@ -35,7 +35,6 @@ import com.pig4cloud.pigx.common.core.constant.CacheConstants; import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.util.R; import com.pig4cloud.pigx.common.core.util.SpringContextHolder; -import com.pig4cloud.pigx.common.data.cache.RedisUtils; import com.pig4cloud.pigx.common.data.datascope.DataScopeTypeEnum; import com.pig4cloud.pigx.common.data.resolver.ParamResolver; import com.pig4cloud.pigx.common.data.tenant.TenantBroker; @@ -46,6 +45,7 @@ import lombok.Data; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; +import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -307,11 +307,12 @@ public class SysTenantServiceImpl extends ServiceImpl keys = RedisUtils.keys(String.format("%s:%s::*", tenantDTO.getId(), CacheConstants.MENU_DETAILS)); - if (CollUtil.isNotEmpty(keys)) { - RedisUtils.delete(keys.toArray(new String[0])); - } + // 菜单缓存按角色 ID 全局存储,仅清除目标租户的角色菜单缓存 + TenantBroker.runAs(tenantDTO.getId(), tenantId -> { + List roles = roleService.list(Wrappers.lambdaQuery().select(SysRole::getRoleId)); + Cache menuCache = Objects.requireNonNull(cacheManager.getCache(CacheConstants.MENU_DETAILS)); + roles.forEach(role -> menuCache.evict(role.getRoleId())); + }); return Boolean.TRUE; }