update 优化 使用动态租户重构业务对租户的逻辑
This commit is contained in:
parent
1e1616ceb0
commit
ac6fe634dc
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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查询用户
|
||||||
*
|
*
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user