角色信息分配错误

This commit is contained in:
秦鸿展
2026-08-11 23:11:25 +08:00
parent 9519d8610b
commit 300b5ac239
@@ -458,15 +458,26 @@ public class UserShipperApplicationService {
}
/**
* 导入时若账号没有任何角色,则补分配企业货主角色
* 导入委托方时,确保账号绑定的是企业货主(company)角色
* 若账号已有 company 角色则跳过;否则先删除已绑定的其他角色(如 addUser 自动分配的 ownerCargo),
* 再重新分配当前组织下的 company 角色,避免登录报“账号未授权角色信息”。
*/
private void assignCompanyRoleIfMissing(Long userId, Long organizationId) {
if (userId == null || organizationId == null) {
return;
}
// 已绑定 company 角色则无需处理
List<UserRoleMenuPO> existingRoles = userRoleDomainService.selectRolesByUserId(userId);
if (CollUtil.isNotEmpty(existingRoles)) {
return;
boolean hasCompany = existingRoles.stream()
.anyMatch(r -> RoleEnum.COMPANY.getCode().equals(r.getRoleCode()));
if (hasCompany) {
return;
}
// 没有 company 角色:删除之前绑定的错误角色(如 ownerCargo),重新分配 company
log.info("导入委托方 - 用户{}已有角色但缺少company角色,删除原角色后重新分配,原角色: {}",
userId, existingRoles.stream().map(UserRoleMenuPO::getRoleCode).collect(Collectors.toList()));
userRoleDomainService.deleteByUserId(userId);
}
// 按 role_code + organization_id 精确匹配角色(selectByOrganizationIdAndRoleCode 的 common_where 不含 roleCode 过滤,不适用)
RolePO rolePO = roleDomainService.selectByRoleCodeAndOrganizationId(RoleEnum.COMPANY.getCode(), organizationId);
@@ -568,8 +579,8 @@ public class UserShipperApplicationService {
userDO.setUserSalt(salt);
}
userDomainService.updateUser(userDO);
// 如果该账号没有任何角色,补分配企业货主角色,避免登录报“账号未授权角色信息”
assignCompanyRoleIfMissing(userId, existingShipper.getOrganizationId());
// 如果该账号没有企业货主(company)角色,补分配当前导入组织下的 company 角色,避免登录报“账号未授权角色信息”
assignCompanyRoleIfMissing(userId, currentOrgId);
}
// 3. 更新 orgCode 中当前组织的 ncCustomer