From d63df710b34a6145078ce90c4ab922da0ed04a51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Tue, 27 Jan 2026 17:38:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(user):=20=E5=AE=8C=E5=96=84=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=B3=A8=E5=86=8C=E6=97=B6=E7=9A=84=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E5=88=86=E9=85=8D=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在邀请注册流程中支持传递roleId参数 - 实现角色分配逻辑:优先使用传入的roleId,其次使用roleCode,默认为"user" - 添加租户验证确保角色属于当前租户 - 修复缺失默认角色时的创建机制 - 确保注册响应中包含用户的角色和权限信息 --- .../system/controller/MainController.java | 4 ++ .../system/service/impl/UserServiceImpl.java | 49 +++++++++++++------ 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/gxwebsoft/common/system/controller/MainController.java b/src/main/java/com/gxwebsoft/common/system/controller/MainController.java index b58c9fc..3dcbc71 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/MainController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/MainController.java @@ -654,6 +654,8 @@ public class MainController extends BaseController { userParam.setUsername(username); userParam.setNickname(DesensitizedUtil.mobilePhone(phone)); userParam.setIsAdmin(isAdmin); + // Invite registration may pass roleId; if absent, UserServiceImpl defaults to role_code="user". + userParam.setRoleId(user.getRoleId()); if (user.getTemplateId() != null) { userParam.setTemplateId(user.getTemplateId()); } @@ -800,6 +802,8 @@ public class MainController extends BaseController { final UserParam userParam = new UserParam(); userParam.setPhone(phone); userParam.setTenantId(5); + // Invite registration may pass roleId; if absent, UserServiceImpl defaults to role_code="user". + userParam.setRoleId(user.getRoleId()); if(user.getIndustryParent() != null){ userParam.setIndustryParent(user.getIndustryParent()); userParam.setIndustryChild(user.getIndustryChild()); diff --git a/src/main/java/com/gxwebsoft/common/system/service/impl/UserServiceImpl.java b/src/main/java/com/gxwebsoft/common/system/service/impl/UserServiceImpl.java index 5ad6f46..097dc77 100644 --- a/src/main/java/com/gxwebsoft/common/system/service/impl/UserServiceImpl.java +++ b/src/main/java/com/gxwebsoft/common/system/service/impl/UserServiceImpl.java @@ -276,24 +276,40 @@ public class UserServiceImpl extends ServiceImpl implements Us } addUser.setTenantId(userParam.getTenantId()); addUser.setRecommend(0); - // 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 roleQw = new QueryWrapper().eq("role_code", "admin"); - if (addUser.getTenantId() != null) { - roleQw.eq("tenant_id", addUser.getTenantId()); + // Role assignment: + // - If roleId is provided (e.g. invite flow), use it (must belong to the same tenant). + // - Otherwise, fall back to roleCode; default to "user". + Role role = null; + 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); - 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; + String roleCode = userParam.getRoleCode(); + if (role == null) { + roleCode = StrUtil.blankToDefault(roleCode, "user"); + QueryWrapper roleQw = new QueryWrapper().eq("role_code", roleCode); + if (addUser.getTenantId() != null) { + roleQw.eq("tenant_id", addUser.getTenantId()); + } + role = roleService.getOne(roleQw, false); + // 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) { - throw new BusinessException("缺少默认角色(role_code=user),请先初始化角色"); + throw new BusinessException("缺少默认角色(role_code=" + (roleCode == null ? "user" : roleCode) + "),请先初始化角色"); } addUser.setRoleId(role.getRoleId()); if (saveUser(addUser)) { @@ -304,6 +320,9 @@ public class UserServiceImpl extends ServiceImpl implements Us userRole.setRoleId(addUser.getRoleId()); 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; }