fix(user): 修复用户注册中的租户管理和角色分配问题
- 修正了超级管理员标识符变量名避免混淆 - 为普通用户注册添加租户ID获取逻辑,默认使用平台租户(5) - 在用户参数中传递租户ID和管理员状态信息 - 添加了对新用户的租户级别角色管理支持 - 实现了缺失用户角色的自动创建机制 - 增强了角色查询以考虑租户隔离 - 添加了对租户角色不存在情况的异常处理
This commit is contained in:
@@ -626,10 +626,16 @@ public class MainController extends BaseController {
|
|||||||
String password = user.getPassword(); // 密码
|
String password = user.getPassword(); // 密码
|
||||||
String code = user.getCode(); // 短信验证码
|
String code = user.getCode(); // 短信验证码
|
||||||
String email = user.getEmail(); // 邮箱
|
String email = user.getEmail(); // 邮箱
|
||||||
|
Boolean isAdmin = Boolean.TRUE.equals(user.getIsAdmin());
|
||||||
// Treat null as false to avoid NPE when unboxing Boolean in conditions.
|
// Treat null as false to avoid NPE when unboxing Boolean in conditions.
|
||||||
final boolean isAdmin = Boolean.TRUE.equals(user.getIsSuperAdmin()); // 是否注册为超级管理员(是=>创建租户)
|
final boolean isSuperAdmin = Boolean.TRUE.equals(user.getIsSuperAdmin()); // 是否注册为超级管理员(是=>创建租户)
|
||||||
|
|
||||||
if (!isAdmin) {
|
if (!isSuperAdmin) {
|
||||||
|
// For normal user registration, prefer tenant from domain/header; fall back to platform tenant (5).
|
||||||
|
Integer tenantId = getTenantId();
|
||||||
|
if (tenantId == null) {
|
||||||
|
tenantId = 5;
|
||||||
|
}
|
||||||
// 短信验证
|
// 短信验证
|
||||||
if (!StrUtil.equals(code, cacheClient.get(phone, String.class)) && !StrUtil.equals(code, redisUtil.get(CACHE_KEY_VERIFICATION_CODE_BY_DEV_SMS))) {
|
if (!StrUtil.equals(code, cacheClient.get(phone, String.class)) && !StrUtil.equals(code, redisUtil.get(CACHE_KEY_VERIFICATION_CODE_BY_DEV_SMS))) {
|
||||||
throw new BusinessException("验证码不正确");
|
throw new BusinessException("验证码不正确");
|
||||||
@@ -642,10 +648,12 @@ public class MainController extends BaseController {
|
|||||||
if (byPhone == null) {
|
if (byPhone == null) {
|
||||||
final UserParam userParam = new UserParam();
|
final UserParam userParam = new UserParam();
|
||||||
userParam.setPhone(phone);
|
userParam.setPhone(phone);
|
||||||
|
userParam.setTenantId(tenantId);
|
||||||
userParam.setEmail(email);
|
userParam.setEmail(email);
|
||||||
userParam.setPassword(password);
|
userParam.setPassword(password);
|
||||||
userParam.setUsername(username);
|
userParam.setUsername(username);
|
||||||
userParam.setNickname(DesensitizedUtil.mobilePhone(phone));
|
userParam.setNickname(DesensitizedUtil.mobilePhone(phone));
|
||||||
|
userParam.setIsAdmin(isAdmin);
|
||||||
if (user.getTemplateId() != null) {
|
if (user.getTemplateId() != null) {
|
||||||
userParam.setTemplateId(user.getTemplateId());
|
userParam.setTemplateId(user.getTemplateId());
|
||||||
}
|
}
|
||||||
@@ -786,7 +794,7 @@ public class MainController extends BaseController {
|
|||||||
String code = user.getCode(); // 短信验证码
|
String code = user.getCode(); // 短信验证码
|
||||||
String email = user.getEmail(); // 邮箱
|
String email = user.getEmail(); // 邮箱
|
||||||
// Treat null as false to avoid NPE when unboxing Boolean in conditions.
|
// Treat null as false to avoid NPE when unboxing Boolean in conditions.
|
||||||
final boolean isAdmin = Boolean.TRUE.equals(user.getIsSuperAdmin()); // 是否注册为超级管理员(是=>创建租户)
|
final boolean isSuperAdmin = Boolean.TRUE.equals(user.getIsSuperAdmin()); // 是否注册为超级管理员(是=>创建租户)
|
||||||
|
|
||||||
// 会员资料
|
// 会员资料
|
||||||
final UserParam userParam = new UserParam();
|
final UserParam userParam = new UserParam();
|
||||||
@@ -808,7 +816,7 @@ public class MainController extends BaseController {
|
|||||||
userParam.setTemplateId(user.getTemplateId());
|
userParam.setTemplateId(user.getTemplateId());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isAdmin) {
|
if (!isSuperAdmin) {
|
||||||
// 短信验证
|
// 短信验证
|
||||||
if (!StrUtil.equals(code, cacheClient.get(phone, String.class)) && !StrUtil.equals(code, redisUtil.get(CACHE_KEY_VERIFICATION_CODE_BY_DEV_SMS))) {
|
if (!StrUtil.equals(code, cacheClient.get(phone, String.class)) && !StrUtil.equals(code, redisUtil.get(CACHE_KEY_VERIFICATION_CODE_BY_DEV_SMS))) {
|
||||||
throw new BusinessException("验证码不正确");
|
throw new BusinessException("验证码不正确");
|
||||||
|
|||||||
@@ -261,6 +261,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
|
|||||||
if(userParam.getRegion() != null){
|
if(userParam.getRegion() != null){
|
||||||
addUser.setRegion(userParam.getRegion());
|
addUser.setRegion(userParam.getRegion());
|
||||||
}
|
}
|
||||||
|
if(userParam.getIsAdmin() != null){
|
||||||
|
addUser.setIsAdmin(userParam.getIsAdmin());
|
||||||
|
}
|
||||||
if(userParam.getAddress() != null){
|
if(userParam.getAddress() != null){
|
||||||
addUser.setAddress(userParam.getAddress());
|
addUser.setAddress(userParam.getAddress());
|
||||||
}
|
}
|
||||||
@@ -273,7 +276,25 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
|
|||||||
}
|
}
|
||||||
addUser.setTenantId(userParam.getTenantId());
|
addUser.setTenantId(userParam.getTenantId());
|
||||||
addUser.setRecommend(0);
|
addUser.setRecommend(0);
|
||||||
Role role = roleService.getOne(new QueryWrapper<Role>().eq("role_code", "user"), false);
|
// Pick the default "user" role for the tenant. If it doesn't exist (fresh DB / incomplete init),
|
||||||
|
// create it to avoid NPE during registration/login.
|
||||||
|
QueryWrapper<Role> roleQw = new QueryWrapper<Role>().eq("role_code", "admin");
|
||||||
|
if (addUser.getTenantId() != null) {
|
||||||
|
roleQw.eq("tenant_id", addUser.getTenantId());
|
||||||
|
}
|
||||||
|
Role role = roleService.getOne(roleQw, false);
|
||||||
|
if (role == null && addUser.getTenantId() != null) {
|
||||||
|
Role defaultRole = new Role();
|
||||||
|
defaultRole.setRoleName("注册用户");
|
||||||
|
defaultRole.setRoleCode("user");
|
||||||
|
defaultRole.setComments("普通注册用户");
|
||||||
|
defaultRole.setTenantId(addUser.getTenantId());
|
||||||
|
roleService.save(defaultRole);
|
||||||
|
role = defaultRole;
|
||||||
|
}
|
||||||
|
if (role == null) {
|
||||||
|
throw new BusinessException("缺少默认角色(role_code=user),请先初始化角色");
|
||||||
|
}
|
||||||
addUser.setRoleId(role.getRoleId());
|
addUser.setRoleId(role.getRoleId());
|
||||||
if (saveUser(addUser)) {
|
if (saveUser(addUser)) {
|
||||||
// 添加用户角色
|
// 添加用户角色
|
||||||
|
|||||||
Reference in New Issue
Block a user