update 优化 使用动态租户重构业务对租户的逻辑

This commit is contained in:
疯狂的狮子Li 2023-11-21 14:57:00 +08:00
parent 1e1616ceb0
commit ac6fe634dc
9 changed files with 64 additions and 120 deletions

View File

@ -3,6 +3,7 @@ package org.dromara.web.service;
import cn.dev33.satoken.secure.BCrypt; import cn.dev33.satoken.secure.BCrypt;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.Constants; import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.core.constant.GlobalConstants;
import org.dromara.common.core.domain.model.RegisterBody; import org.dromara.common.core.domain.model.RegisterBody;
@ -22,7 +23,6 @@ import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.mapper.SysUserMapper; import org.dromara.system.mapper.SysUserMapper;
import org.dromara.system.service.ISysUserService; import org.dromara.system.service.ISysUserService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
@ -59,10 +59,11 @@ public class SysRegisterService {
sysUser.setPassword(BCrypt.hashpw(password)); sysUser.setPassword(BCrypt.hashpw(password));
sysUser.setUserType(userType); sysUser.setUserType(userType);
boolean exist = userMapper.exists(new LambdaQueryWrapper<SysUser>() boolean exist = TenantHelper.dynamic(tenantId, () -> {
.eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId) return userMapper.exists(new LambdaQueryWrapper<SysUser>()
.eq(SysUser::getUserName, sysUser.getUserName()) .eq(SysUser::getUserName, sysUser.getUserName())
.ne(ObjectUtil.isNotNull(sysUser.getUserId()), SysUser::getUserId, sysUser.getUserId())); .ne(ObjectUtil.isNotNull(sysUser.getUserId()), SysUser::getUserId, sysUser.getUserId()));
});
if (exist) { if (exist) {
throw new UserException("user.register.save.error", username); throw new UserException("user.register.save.error", username);
} }

View File

@ -89,21 +89,19 @@ public class EmailAuthStrategy implements IAuthStrategy {
} }
private SysUserVo loadUserByEmail(String tenantId, String email) { private SysUserVo loadUserByEmail(String tenantId, String email) {
SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>() return TenantHelper.dynamic(tenantId, () -> {
.select(SysUser::getEmail, SysUser::getStatus) SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
.eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId) .select(SysUser::getEmail, SysUser::getStatus)
.eq(SysUser::getEmail, email)); .eq(SysUser::getEmail, email));
if (ObjectUtil.isNull(user)) { if (ObjectUtil.isNull(user)) {
log.info("登录用户:{} 不存在.", email); log.info("登录用户:{} 不存在.", email);
throw new UserException("user.not.exists", email); throw new UserException("user.not.exists", email);
} else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
log.info("登录用户:{} 已被停用.", email); log.info("登录用户:{} 已被停用.", email);
throw new UserException("user.blocked", email); throw new UserException("user.blocked", email);
} }
if (TenantHelper.isEnable()) { return userMapper.selectUserByEmail(email);
return userMapper.selectTenantUserByEmail(email, tenantId); });
}
return userMapper.selectUserByEmail(email);
} }
} }

View File

@ -108,21 +108,19 @@ public class PasswordAuthStrategy implements IAuthStrategy {
} }
private SysUserVo loadUserByUsername(String tenantId, String username) { private SysUserVo loadUserByUsername(String tenantId, String username) {
SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>() return TenantHelper.dynamic(tenantId, () -> {
.select(SysUser::getUserName, SysUser::getStatus) SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
.eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId) .select(SysUser::getUserName, SysUser::getStatus)
.eq(SysUser::getUserName, username)); .eq(SysUser::getUserName, username));
if (ObjectUtil.isNull(user)) { if (ObjectUtil.isNull(user)) {
log.info("登录用户:{} 不存在.", username); log.info("登录用户:{} 不存在.", username);
throw new UserException("user.not.exists", username); throw new UserException("user.not.exists", username);
} else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
log.info("登录用户:{} 已被停用.", username); log.info("登录用户:{} 已被停用.", username);
throw new UserException("user.blocked", username); throw new UserException("user.blocked", username);
} }
if (TenantHelper.isEnable()) { return userMapper.selectUserByUserName(username);
return userMapper.selectTenantUserByUserName(username, tenantId); });
}
return userMapper.selectUserByUserName(username);
} }
} }

View File

@ -89,21 +89,19 @@ public class SmsAuthStrategy implements IAuthStrategy {
} }
private SysUserVo loadUserByPhonenumber(String tenantId, String phonenumber) { private SysUserVo loadUserByPhonenumber(String tenantId, String phonenumber) {
SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>() return TenantHelper.dynamic(tenantId, () -> {
.select(SysUser::getPhonenumber, SysUser::getStatus) SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
.eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId) .select(SysUser::getPhonenumber, SysUser::getStatus)
.eq(SysUser::getPhonenumber, phonenumber)); .eq(SysUser::getPhonenumber, phonenumber));
if (ObjectUtil.isNull(user)) { if (ObjectUtil.isNull(user)) {
log.info("登录用户:{} 不存在.", phonenumber); log.info("登录用户:{} 不存在.", phonenumber);
throw new UserException("user.not.exists", phonenumber); throw new UserException("user.not.exists", phonenumber);
} else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
log.info("登录用户:{} 已被停用.", phonenumber); log.info("登录用户:{} 已被停用.", phonenumber);
throw new UserException("user.blocked", phonenumber); throw new UserException("user.blocked", phonenumber);
} }
if (TenantHelper.isEnable()) { return userMapper.selectUserByPhonenumber(phonenumber);
return userMapper.selectTenantUserByPhonenumber(phonenumber, tenantId); });
}
return userMapper.selectUserByPhonenumber(phonenumber);
} }
} }

View File

@ -113,21 +113,19 @@ public class SocialAuthStrategy implements IAuthStrategy {
} }
private SysUserVo loadUser(String tenantId, Long userId) { private SysUserVo loadUser(String tenantId, Long userId) {
SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>() return TenantHelper.dynamic(tenantId, () -> {
SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getUserName, SysUser::getStatus) .select(SysUser::getUserName, SysUser::getStatus)
.eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId)
.eq(SysUser::getUserId, userId)); .eq(SysUser::getUserId, userId));
if (ObjectUtil.isNull(user)) { if (ObjectUtil.isNull(user)) {
log.info("登录用户:{} 不存在.", ""); log.info("登录用户:{} 不存在.", "");
throw new UserException("user.not.exists", ""); throw new UserException("user.not.exists", "");
} else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) { } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
log.info("登录用户:{} 已被停用.", ""); log.info("登录用户:{} 已被停用.", "");
throw new UserException("user.blocked", ""); throw new UserException("user.blocked", "");
} }
if (TenantHelper.isEnable()) { return userMapper.selectUserByUserName(user.getUserName());
return userMapper.selectTenantUserByUserName(user.getUserName(), tenantId); });
}
return userMapper.selectUserByUserName(user.getUserName());
} }
} }

View File

@ -1,15 +1,14 @@
package org.dromara.system.mapper; package org.dromara.system.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.annotation.DataColumn; import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
@ -86,37 +85,6 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
*/ */
SysUserVo selectUserByEmail(String email); SysUserVo selectUserByEmail(String email);
/**
* 通过用户名查询用户(不走租户插件)
*
* @param userName 用户名
* @param tenantId 租户id
* @return 用户对象信息
*/
@InterceptorIgnore(tenantLine = "true")
SysUserVo selectTenantUserByUserName(@Param("userName") String userName, @Param("tenantId") String tenantId);
/**
* 通过手机号查询用户(不走租户插件)
*
* @param phonenumber 手机号
* @param tenantId 租户id
* @return 用户对象信息
*/
@InterceptorIgnore(tenantLine = "true")
SysUserVo selectTenantUserByPhonenumber(@Param("phonenumber") String phonenumber, @Param("tenantId") String tenantId);
/**
* 通过邮箱查询用户(不走租户插件)
*
* @param email 邮箱
* @param tenantId 租户id
* @return 用户对象信息
*/
@InterceptorIgnore(tenantLine = "true")
SysUserVo selectTenantUserByEmail(@Param("email") String email, @Param("tenantId") String tenantId);
/** /**
* 通过用户ID查询用户 * 通过用户ID查询用户
* *

View File

@ -85,9 +85,10 @@ public class SysConfigServiceImpl implements ISysConfigService, ConfigService {
*/ */
@Override @Override
public boolean selectRegisterEnabled(String tenantId) { public boolean selectRegisterEnabled(String tenantId) {
SysConfig retConfig = baseMapper.selectOne(new LambdaQueryWrapper<SysConfig>() SysConfig retConfig = TenantHelper.dynamic(tenantId, () -> {
.eq(SysConfig::getConfigKey, "sys.account.registerUser") return baseMapper.selectOne(new LambdaQueryWrapper<SysConfig>()
.eq(TenantHelper.isEnable(),SysConfig::getTenantId, tenantId)); .eq(SysConfig::getConfigKey, "sys.account.registerUser"));
});
if (ObjectUtil.isNull(retConfig)) { if (ObjectUtil.isNull(retConfig)) {
return false; return false;
} }

View File

@ -57,9 +57,8 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
new LambdaQueryWrapper<SysOssConfig>().orderByAsc(TenantEntity::getTenantId)) new LambdaQueryWrapper<SysOssConfig>().orderByAsc(TenantEntity::getTenantId))
); );
Map<String, List<SysOssConfig>> map = StreamUtils.groupByKey(list, SysOssConfig::getTenantId); Map<String, List<SysOssConfig>> map = StreamUtils.groupByKey(list, SysOssConfig::getTenantId);
try { for (String tenantId : map.keySet()) {
for (String tenantId : map.keySet()) { TenantHelper.dynamic(tenantId, () -> {
TenantHelper.setDynamic(tenantId);
// 加载OSS初始化配置 // 加载OSS初始化配置
for (SysOssConfig config : map.get(tenantId)) { for (SysOssConfig config : map.get(tenantId)) {
String configKey = config.getConfigKey(); String configKey = config.getConfigKey();
@ -68,9 +67,7 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService {
} }
CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config)); CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config));
} }
} });
} finally {
TenantHelper.clearDynamic();
} }
} }

View File

@ -118,21 +118,6 @@
where u.del_flag = '0' and u.email = #{email} where u.del_flag = '0' and u.email = #{email}
</select> </select>
<select id="selectTenantUserByUserName" parameterType="String" resultMap="SysUserResult">
<include refid="selectUserVo"/>
where u.del_flag = '0' and u.user_name = #{userName} and u.tenant_id = #{tenantId}
</select>
<select id="selectTenantUserByPhonenumber" parameterType="String" resultMap="SysUserResult">
<include refid="selectUserVo"/>
where u.del_flag = '0' and u.phonenumber = #{phonenumber} and u.tenant_id = #{tenantId}
</select>
<select id="selectTenantUserByEmail" parameterType="String" resultMap="SysUserResult">
<include refid="selectUserVo"/>
where u.del_flag = '0' and u.email = #{email} and u.tenant_id = #{tenantId}
</select>
<select id="selectUserById" parameterType="Long" resultMap="SysUserResult"> <select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
<include refid="selectUserVo"/> <include refid="selectUserVo"/>
where u.del_flag = '0' and u.user_id = #{userId} where u.del_flag = '0' and u.user_id = #{userId}