6 changed files with 253 additions and 64 deletions
@ -0,0 +1,108 @@ |
|||||
|
package org.dromara.im.util; |
||||
|
|
||||
|
import cn.hutool.core.util.ObjectUtil; |
||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
||||
|
import com.baomidou.mybatisplus.core.toolkit.support.SFunction; |
||||
|
import lombok.AccessLevel; |
||||
|
import lombok.NoArgsConstructor; |
||||
|
import org.dromara.im.service.IImAgentService; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
/** |
||||
|
* LambdaQueryWrapper 通用工具类 |
||||
|
* |
||||
|
* @author Blue |
||||
|
* @date 2026-04-08 |
||||
|
*/ |
||||
|
@NoArgsConstructor(access = AccessLevel.PRIVATE) |
||||
|
public class LambdaQueryWrapperHelper { |
||||
|
|
||||
|
private static IImAgentService imAgentService; |
||||
|
|
||||
|
/** |
||||
|
* 初始化服务(由 Spring 调用) |
||||
|
*/ |
||||
|
@Component |
||||
|
public static class Initializer { |
||||
|
@Autowired |
||||
|
public void setImAgentService(IImAgentService imAgentService) { |
||||
|
LambdaQueryWrapperHelper.imAgentService = imAgentService; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 为 LambdaQueryWrapper 追加 uniqueToken 查询条件 |
||||
|
* <p> |
||||
|
* 根据当前登录用户ID获取对应的 uniqueToken,并添加到查询条件中 |
||||
|
* 如果用户ID为1(超级管理员),则不添加该条件 |
||||
|
* |
||||
|
* @param wrapper 查询条件包装器 |
||||
|
* @param tokenField 实体类中 uniqueToken 字段的 getter 方法引用 |
||||
|
* @param <T> 实体类型 |
||||
|
* @return 添加了 uniqueToken 条件的 LambdaQueryWrapper |
||||
|
*/ |
||||
|
public static <T> LambdaQueryWrapper<T> appendToken(LambdaQueryWrapper<T> wrapper, SFunction<T, ?> tokenField) { |
||||
|
if (wrapper == null || tokenField == null) { |
||||
|
return wrapper; |
||||
|
} |
||||
|
|
||||
|
String token = getTokenByUserId(); |
||||
|
|
||||
|
// 如果 token 为 null,表示是超级管理员,不添加过滤条件
|
||||
|
if (token == null) { |
||||
|
return wrapper; |
||||
|
} |
||||
|
|
||||
|
// 添加 uniqueToken 查询条件
|
||||
|
wrapper.eq(ObjectUtil.isNotEmpty(token), tokenField, token); |
||||
|
|
||||
|
return wrapper; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 为 LambdaUpdateWrapper 追加 uniqueToken 修改/删除条件 |
||||
|
* <p> |
||||
|
* 根据当前登录用户ID获取对应的 uniqueToken,并添加到更新或删除的 WHERE 条件中 |
||||
|
* 如果用户ID为1(超级管理员),则不添加该条件 |
||||
|
* <p> |
||||
|
* 使用场景: |
||||
|
* - 更新数据时限制只能更新自己的数据 |
||||
|
* - 删除数据时限制只能删除自己的数据 |
||||
|
* |
||||
|
* @param wrapper 更新条件包装器 |
||||
|
* @param tokenField 实体类中 uniqueToken 字段的 getter 方法引用 |
||||
|
* @param <T> 实体类型 |
||||
|
* @return 添加了 uniqueToken 条件的 LambdaUpdateWrapper |
||||
|
*/ |
||||
|
public static <T> LambdaUpdateWrapper<T> appendToken(LambdaUpdateWrapper<T> wrapper, SFunction<T, ?> tokenField) { |
||||
|
if (wrapper == null || tokenField == null) { |
||||
|
return wrapper; |
||||
|
} |
||||
|
|
||||
|
String token = getTokenByUserId(); |
||||
|
|
||||
|
// 如果 token 为 null,表示是超级管理员,不添加过滤条件
|
||||
|
if (token == null) { |
||||
|
return wrapper; |
||||
|
} |
||||
|
|
||||
|
// 添加 uniqueToken 修改/删除条件
|
||||
|
wrapper.eq(ObjectUtil.isNotEmpty(token), tokenField, token); |
||||
|
|
||||
|
return wrapper; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取当前用户的 uniqueToken |
||||
|
* |
||||
|
* @return uniqueToken,超级管理员返回 null,未找到返回 "error" |
||||
|
*/ |
||||
|
private static String getTokenByUserId() { |
||||
|
if (imAgentService == null) { |
||||
|
throw new IllegalStateException("IImAgentService 未初始化,请确保 Spring 容器已启动"); |
||||
|
} |
||||
|
return imAgentService.getTokenByUserId(); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue