feat(user): 完善用户注册时的角色分配机制
- 在邀请注册流程中支持传递roleId参数 - 实现角色分配逻辑:优先使用传入的roleId,其次使用roleCode,默认为"user" - 添加租户验证确保角色属于当前租户 - 修复缺失默认角色时的创建机制 - 确保注册响应中包含用户的角色和权限信息
This commit is contained in:
@@ -654,6 +654,8 @@ public class MainController extends BaseController {
|
|||||||
userParam.setUsername(username);
|
userParam.setUsername(username);
|
||||||
userParam.setNickname(DesensitizedUtil.mobilePhone(phone));
|
userParam.setNickname(DesensitizedUtil.mobilePhone(phone));
|
||||||
userParam.setIsAdmin(isAdmin);
|
userParam.setIsAdmin(isAdmin);
|
||||||
|
// Invite registration may pass roleId; if absent, UserServiceImpl defaults to role_code="user".
|
||||||
|
userParam.setRoleId(user.getRoleId());
|
||||||
if (user.getTemplateId() != null) {
|
if (user.getTemplateId() != null) {
|
||||||
userParam.setTemplateId(user.getTemplateId());
|
userParam.setTemplateId(user.getTemplateId());
|
||||||
}
|
}
|
||||||
@@ -800,6 +802,8 @@ public class MainController extends BaseController {
|
|||||||
final UserParam userParam = new UserParam();
|
final UserParam userParam = new UserParam();
|
||||||
userParam.setPhone(phone);
|
userParam.setPhone(phone);
|
||||||
userParam.setTenantId(5);
|
userParam.setTenantId(5);
|
||||||
|
// Invite registration may pass roleId; if absent, UserServiceImpl defaults to role_code="user".
|
||||||
|
userParam.setRoleId(user.getRoleId());
|
||||||
if(user.getIndustryParent() != null){
|
if(user.getIndustryParent() != null){
|
||||||
userParam.setIndustryParent(user.getIndustryParent());
|
userParam.setIndustryParent(user.getIndustryParent());
|
||||||
userParam.setIndustryChild(user.getIndustryChild());
|
userParam.setIndustryChild(user.getIndustryChild());
|
||||||
|
|||||||
@@ -276,24 +276,40 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
|
|||||||
}
|
}
|
||||||
addUser.setTenantId(userParam.getTenantId());
|
addUser.setTenantId(userParam.getTenantId());
|
||||||
addUser.setRecommend(0);
|
addUser.setRecommend(0);
|
||||||
// Pick the default "user" role for the tenant. If it doesn't exist (fresh DB / incomplete init),
|
// Role assignment:
|
||||||
// create it to avoid NPE during registration/login.
|
// - If roleId is provided (e.g. invite flow), use it (must belong to the same tenant).
|
||||||
QueryWrapper<Role> roleQw = new QueryWrapper<Role>().eq("role_code", "admin");
|
// - Otherwise, fall back to roleCode; default to "user".
|
||||||
if (addUser.getTenantId() != null) {
|
Role role = null;
|
||||||
roleQw.eq("tenant_id", addUser.getTenantId());
|
if (userParam.getRoleId() != null) {
|
||||||
|
role = roleService.getById(userParam.getRoleId());
|
||||||
|
if (role != null
|
||||||
|
&& addUser.getTenantId() != null
|
||||||
|
&& role.getTenantId() != null
|
||||||
|
&& !addUser.getTenantId().equals(role.getTenantId())) {
|
||||||
|
throw new BusinessException("角色不属于当前租户");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Role role = roleService.getOne(roleQw, false);
|
String roleCode = userParam.getRoleCode();
|
||||||
if (role == null && addUser.getTenantId() != null) {
|
if (role == null) {
|
||||||
Role defaultRole = new Role();
|
roleCode = StrUtil.blankToDefault(roleCode, "user");
|
||||||
defaultRole.setRoleName("注册用户");
|
QueryWrapper<Role> roleQw = new QueryWrapper<Role>().eq("role_code", roleCode);
|
||||||
defaultRole.setRoleCode("user");
|
if (addUser.getTenantId() != null) {
|
||||||
defaultRole.setComments("普通注册用户");
|
roleQw.eq("tenant_id", addUser.getTenantId());
|
||||||
defaultRole.setTenantId(addUser.getTenantId());
|
}
|
||||||
roleService.save(defaultRole);
|
role = roleService.getOne(roleQw, false);
|
||||||
role = defaultRole;
|
// If the default "user" role is missing (fresh DB / incomplete init), create it to avoid empty roles.
|
||||||
|
if (role == null && addUser.getTenantId() != null && "user".equals(roleCode)) {
|
||||||
|
Role defaultRole = new Role();
|
||||||
|
defaultRole.setRoleName("注册用户");
|
||||||
|
defaultRole.setRoleCode("user");
|
||||||
|
defaultRole.setComments("普通注册用户");
|
||||||
|
defaultRole.setTenantId(addUser.getTenantId());
|
||||||
|
roleService.save(defaultRole);
|
||||||
|
role = defaultRole;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (role == null) {
|
if (role == null) {
|
||||||
throw new BusinessException("缺少默认角色(role_code=user),请先初始化角色");
|
throw new BusinessException("缺少默认角色(role_code=" + (roleCode == null ? "user" : roleCode) + "),请先初始化角色");
|
||||||
}
|
}
|
||||||
addUser.setRoleId(role.getRoleId());
|
addUser.setRoleId(role.getRoleId());
|
||||||
if (saveUser(addUser)) {
|
if (saveUser(addUser)) {
|
||||||
@@ -304,6 +320,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
|
|||||||
userRole.setRoleId(addUser.getRoleId());
|
userRole.setRoleId(addUser.getRoleId());
|
||||||
userRoleService.save(userRole);
|
userRoleService.save(userRole);
|
||||||
}
|
}
|
||||||
|
// Ensure caller (e.g. register / invite register) gets non-empty roles/authorities in response.
|
||||||
|
addUser.setRoles(userRoleService.listByUserId(addUser.getUserId()));
|
||||||
|
addUser.setAuthorities(roleMenuService.listMenuByUserId(addUser.getUserId(), null));
|
||||||
return addUser;
|
return addUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user