Преглед изворни кода

菜单数据隔离 缓存失效问题 (去除缓存,未完整优化,涉及多个功能缓存未区分tenantid导致数据覆盖、丢失等问题)

小车车 пре 4 месеци
родитељ
комит
d27b74cdbb

+ 2 - 2
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/permission/MenuMapper.java

@@ -25,8 +25,8 @@ public interface MenuMapper extends BaseMapperX<MenuDO> {
                 .eqIfPresent(MenuDO::getStatus, reqVO.getStatus()));
     }
 
-    default List<MenuDO> selectListByPermission(String permission) {
-        return selectList(MenuDO::getPermission, permission);
+    default List<MenuDO> selectListByPermission(String permission, Long tenantId) {
+        return selectList(MenuDO::getPermission, permission, MenuDO::getTenantId, tenantId);
     }
 
     default MenuDO selectByComponentName(String componentName) {

+ 7 - 2
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder;
 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSaveVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
@@ -171,9 +172,13 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, MenuDO> implements
     }
 
     @Override
-    @Cacheable(value = RedisKeyConstants.PERMISSION_MENU_ID_LIST, key = "#permission")
+    // @Cacheable(value = RedisKeyConstants.PERMISSION_MENU_ID_LIST, key = "#permission")  // 源码
+    //@Cacheable(value = RedisKeyConstants.PERMISSION_MENU_ID_LIST,  // 后加
+    //        // SpEL表达式直接获取租户ID并拼接
+    //        key = "T(cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder).getTenantId() + ':' + #permission")
     public List<Long> getMenuIdListByPermissionFromCache(String permission) {
-        List<MenuDO> menus = menuMapper.selectListByPermission(permission);
+        Long tenantId = TenantContextHolder.getTenantId();
+        List<MenuDO> menus = menuMapper.selectListByPermission(permission, tenantId);
         return convertList(menus, MenuDO::getId);
     }