用户角色接口调整

This commit is contained in:
wangjibo 2023-10-21 15:02:37 +08:00
parent 5080d67322
commit 63ec1595f3
6 changed files with 41 additions and 31 deletions

View File

@ -24,18 +24,18 @@ public interface TyrSaasRoleUserApi {
@PostMapping("/api/saas-role-user/save-or-update") @PostMapping("/api/saas-role-user/save-or-update")
ApiResult<Void> saveOrUpdate(@RequestBody @Valid RoleUserReq req); ApiResult<Void> saveOrUpdate(@RequestBody @Valid RoleUserReq req);
/**
* 用户角色列表 限制1000条
*/
@PostMapping("/api/saas-role-user/list")
ApiResult<List<SaasRoleUserDTO>> roleUserList(@RequestBody @Valid RoleUserParam param);
/** /**
* 创建超管 * 创建超管
*/ */
@PostMapping("/api/saas-role-user/create-super-admin-role") @PostMapping("/api/saas-role-user/create-super-admin-role")
ApiResult<Void> createSuperAdminRole(@RequestBody @Valid @NotEmpty CreateSuperAdminRoleParam param); ApiResult<Void> createSuperAdminRole(@RequestBody @Valid @NotEmpty CreateSuperAdminRoleParam param);
/**
* 用户角色列表 限制1000条
*/
@PostMapping("/api/saas-role-user/list")
ApiResult<List<SaasRoleUserDTO>> roleUserList(@RequestBody @Valid RoleUserParam param);
/** /**
* 批量查询超管, 只能批量获取单个工作台台下的超管业务系统需要根据返回的identityId和identityType查询identityProfile查询用户明细信息 * 批量查询超管, 只能批量获取单个工作台台下的超管业务系统需要根据返回的identityId和identityType查询identityProfile查询用户明细信息
*/ */

View File

@ -35,6 +35,7 @@ public class CreateSuperAdminRoleParam {
@NotNull(message = "workspaceType不能为空") @NotNull(message = "workspaceType不能为空")
private Integer workspaceType; private Integer workspaceType;
@NotNull(message = "自然人id不能为空")
private Long naturalPersonId; private Long naturalPersonId;
} }

View File

@ -34,14 +34,18 @@ public class RoleUserReq {
@NotNull @NotNull
private Long ouId; private Long ouId;
private Long personId;
/** /**
* 身份id * 身份id
*/ */
@NotNull @NotNull
private Long identityId; private Long identityId;
/**
* 自然人id
*/
@NotNull
private Long personId;
/** /**
* 身份类型 * 身份类型
*/ */
@ -51,7 +55,6 @@ public class RoleUserReq {
/** /**
* 完整的update所有RoleId都被更新 * 完整的update所有RoleId都被更新
*/ */
@NotEmpty
private Set<Long> updateRoleIds; private Set<Long> updateRoleIds;
} }

View File

@ -31,7 +31,6 @@ public class RoleUserController implements TyrSaasRoleUserApi {
public ApiResult<Void> saveOrUpdate(@Valid RoleUserReq req) { public ApiResult<Void> saveOrUpdate(@Valid RoleUserReq req) {
saasRoleUserService.saveOrUpdate(req); saasRoleUserService.saveOrUpdate(req);
return ApiResult.ok(); return ApiResult.ok();
} }
@Override @Override

View File

@ -56,35 +56,41 @@ public class RoleUserService implements SaasRoleUserService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void saveOrUpdate(RoleUserReq req) { public void saveOrUpdate(RoleUserReq req) {
if (CollectionUtil.isEmpty(req.getUpdateRoleIds())) { Set<Long> updateRoleIds = req.getUpdateRoleIds();
throw new ServiceException("当前不支持空角色"); // 角色校验(不能将角色修改为管理员角色)
} if(CollectionUtils.isNotEmpty(updateRoleIds)){
List<SaasRole> roles = saasRoleDao.listByIds(updateRoleIds);
List<SaasRole> roles = saasRoleDao.listByIds(req.getUpdateRoleIds()); if (roles.stream().anyMatch(e -> RoleTypeEnum.getRoleType(e.getRoleType()).isAdminRole())) {
if (roles.stream().anyMatch(e -> RoleTypeEnum.getRoleType(e.getRoleType()).isAdminRole())) { throw new ServiceException("暂不支持更换管理员角色");
throw new ServiceException("暂不支持更换管理员角色"); }
} }
// 查询用户所有角色
List<SaasRoleUserRelation> existsRoleUser = roleUserRelationDao.query(req.getIdentityId(), req.getIdentityType().getCode(), req.getWorkspaceId(), req.getOuId()); List<SaasRoleUserRelation> existsRoleUser = roleUserRelationDao.query(req.getIdentityId(), req.getIdentityType().getCode(), req.getWorkspaceId(), req.getOuId());
// 当前用户非超管的角色
List<Long> notAdminRole = Collections.emptyList();
if (CollectionUtils.isNotEmpty(existsRoleUser)) { if (CollectionUtils.isNotEmpty(existsRoleUser)) {
List<SaasRole> existsRole = saasRoleDao.listByIds(existsRoleUser.stream().mapToLong(SaasRoleUserRelation::getRoleId).boxed().collect(Collectors.toList())); List<SaasRole> existsRole = saasRoleDao.listByIds(existsRoleUser.stream().mapToLong(SaasRoleUserRelation::getRoleId).boxed().collect(Collectors.toList()));
List<SaasRole> notAdminRole = existsRole.stream().filter(e -> !RoleTypeEnum.getRoleType(e.getRoleType()).isAdminRole()).collect(Collectors.toList()); // 管理员角色
// 删除现有非管理员的角色 List<Long> adminRole = existsRole.stream().filter(e -> RoleTypeEnum.getRoleType(e.getRoleType()).isAdminRole()).mapToLong(SaasRole::getId).boxed().collect(Collectors.toList());
roleUserRelationDao.deleteByUser(BaseWorkspaceModel.builder() // 排除管理员角色(普通角色) 这里用过滤的方式是为了防止脏数据产生(saas_role_user_relation表有用户数据但是角色表已经被删除)
.workspaceId(req.getWorkspaceId()) notAdminRole = existsRoleUser.stream().mapToLong(SaasRoleUserRelation::getRoleId).boxed().filter(roleId -> !adminRole.contains(roleId)).collect(Collectors.toList());
.ouId(req.getOuId()) }
.identityId(req.getIdentityId()) BaseWorkspaceModel workspaceModel = BaseWorkspaceModel.builder()
.identityType(req.getIdentityType()) .workspaceId(req.getWorkspaceId()).ouId(req.getOuId())
.build() .identityId(req.getIdentityId()).identityType(req.getIdentityType())
, notAdminRole .build();
.stream()
.mapToLong(BaseEntity::getId)
.boxed()
.collect(Collectors.toList()));
// 删除现有非管理员的角色
if (CollectionUtils.isNotEmpty(existsRoleUser)) {
roleUserRelationDao.deleteByUser(workspaceModel, notAdminRole);
}
// 清空所有角色
if (CollectionUtil.isEmpty(updateRoleIds)) {
return;
} }
roleUserRelationDao.saveBatch(req.getUpdateRoleIds().stream().map(e -> { roleUserRelationDao.saveBatch(updateRoleIds.stream().map(e -> {
SaasRoleUserRelation saasRoleUserRelation = new SaasRoleUserRelation(); SaasRoleUserRelation saasRoleUserRelation = new SaasRoleUserRelation();
saasRoleUserRelation.setIdentityId(req.getIdentityId()); saasRoleUserRelation.setIdentityId(req.getIdentityId());
saasRoleUserRelation.setIdentityType(req.getIdentityType().getCode()); saasRoleUserRelation.setIdentityType(req.getIdentityType().getCode());

View File

@ -38,6 +38,7 @@ public class SaasRoleUserRelationServiceImpl implements SaasRoleUserRelationServ
@Override @Override
public List<SaasRoleUserDTO> list(RoleUserParam param) { public List<SaasRoleUserDTO> list(RoleUserParam param) {
// TODO jhy 角色查询 需要验证标准角色和自定义角色的查询逻辑
List<SaasRoleUserRelation> saasRoleUserRelations = saasRoleUserRelationDao.lambdaQuery() List<SaasRoleUserRelation> saasRoleUserRelations = saasRoleUserRelationDao.lambdaQuery()
.eq(Objects.nonNull(param.getIdentityId()), SaasRoleUserRelation::getIdentityId, param.getIdentityId()) .eq(Objects.nonNull(param.getIdentityId()), SaasRoleUserRelation::getIdentityId, param.getIdentityId())
.eq(Objects.nonNull(param.getIdentityType()), SaasRoleUserRelation::getIdentityType, param.getIdentityType()) .eq(Objects.nonNull(param.getIdentityType()), SaasRoleUserRelation::getIdentityType, param.getIdentityType())