30
This commit is contained in:
+13
-10
@@ -458,24 +458,27 @@ public class UserShipperApplicationService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导入委托方时,确保账号绑定的是企业货主(company)角色。
|
* 导入委托方时,确保账号仅绑定企业货主(company)角色。
|
||||||
* 若账号已有 company 角色则跳过;否则先删除已绑定的其他角色(如 addUser 自动分配的 ownerCargo),
|
* 注意:authShipper 会把“当前登录管理员的所有角色”都分配给导入用户,
|
||||||
* 再重新分配当前组织下的 company 角色,避免登录报“账号未授权角色信息”。
|
* 因此这里必须保证用户最终只绑定 company 角色——若现有角色不是“唯一的 company 角色”,
|
||||||
|
* 一律删除后重新分配,避免残留 ownerCargo 等多条错误角色。
|
||||||
*/
|
*/
|
||||||
private void assignCompanyRoleIfMissing(Long userId, Long organizationId) {
|
private void assignCompanyRoleIfMissing(Long userId, Long organizationId) {
|
||||||
if (userId == null || organizationId == null) {
|
if (userId == null || organizationId == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 已绑定 company 角色则无需处理
|
// 查询用户现有角色
|
||||||
List<UserRoleMenuPO> existingRoles = userRoleDomainService.selectRolesByUserId(userId);
|
List<UserRoleMenuPO> existingRoles = userRoleDomainService.selectRolesByUserId(userId);
|
||||||
if (CollUtil.isNotEmpty(existingRoles)) {
|
// 只有恰好绑定了唯一的 company 角色时,才认为正确,无需处理
|
||||||
boolean hasCompany = existingRoles.stream()
|
boolean onlyCompany = !CollUtil.isEmpty(existingRoles)
|
||||||
.anyMatch(r -> RoleEnum.COMPANY.getCode().equals(r.getRoleCode()));
|
&& existingRoles.size() == 1
|
||||||
if (hasCompany) {
|
&& RoleEnum.COMPANY.getCode().equals(existingRoles.get(0).getRoleCode());
|
||||||
|
if (onlyCompany) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 没有 company 角色:删除之前绑定的错误角色(如 ownerCargo),重新分配 company
|
// 否则:删除所有现有角色(ownerCargo、或多个角色),重新分配 company
|
||||||
log.info("导入委托方 - 用户{}已有角色但缺少company角色,删除原角色后重新分配,原角色: {}",
|
if (CollUtil.isNotEmpty(existingRoles)) {
|
||||||
|
log.info("导入委托方 - 用户{}角色不正确,删除原角色后重新分配company,原角色: {}",
|
||||||
userId, existingRoles.stream().map(UserRoleMenuPO::getRoleCode).collect(Collectors.toList()));
|
userId, existingRoles.stream().map(UserRoleMenuPO::getRoleCode).collect(Collectors.toList()));
|
||||||
userRoleDomainService.deleteByUserId(userId);
|
userRoleDomainService.deleteByUserId(userId);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user