feat:(REQ-2227) 调整删除角色的接口
This commit is contained in:
parent
788634e2f4
commit
d1f63a5aeb
@ -11,7 +11,6 @@ import cn.axzo.tyr.client.model.req.QueryRoleByNameReq;
|
||||
import cn.axzo.tyr.client.model.req.QuerySaasRoleReq;
|
||||
import cn.axzo.tyr.client.model.req.RoleWithUserQueryReq;
|
||||
import cn.axzo.tyr.client.model.req.TreeRoleReq;
|
||||
import cn.axzo.tyr.client.model.req.UpdateRoleGroupOffsetReq;
|
||||
import cn.axzo.tyr.client.model.req.UpdateRoleOffsetReq;
|
||||
import cn.axzo.tyr.client.model.res.FeatureRoleRelationResp;
|
||||
import cn.axzo.tyr.client.model.res.IsSuperAdminRes;
|
||||
@ -20,6 +19,7 @@ import cn.axzo.tyr.client.model.res.QueryRoleByNameResp;
|
||||
import cn.axzo.tyr.client.model.res.RoleTreeRes;
|
||||
import cn.axzo.tyr.client.model.res.RoleWithUserRes;
|
||||
import cn.axzo.tyr.client.model.res.SaasRoleRes;
|
||||
import cn.axzo.tyr.client.model.vo.DeleteRoleVO;
|
||||
import cn.axzo.tyr.client.model.vo.SaasRoleAndGroupVO;
|
||||
import cn.axzo.tyr.client.model.vo.SaasRoleCategoryVO;
|
||||
import cn.axzo.tyr.client.model.vo.SaasRoleGroupCodeVO;
|
||||
@ -77,8 +77,7 @@ public interface TyrSaasRoleApi {
|
||||
* 删除
|
||||
*/
|
||||
@PostMapping("/api/saasRole/delete")
|
||||
@Deprecated
|
||||
ApiResult<Void> delete(@RequestBody List<Long> id);
|
||||
ApiResult<Void> delete(@RequestBody DeleteRoleVO request);
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@ -0,0 +1,36 @@
|
||||
package cn.axzo.tyr.client.model.vo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class DeleteRoleVO {
|
||||
/**
|
||||
* 待删除角色集合
|
||||
*/
|
||||
@NotEmpty(message = "roleIds不能为空")
|
||||
private List<Long> roleIds;
|
||||
|
||||
/**
|
||||
* 待删除角色所属workSpaceId 历史接口需要
|
||||
*/
|
||||
private Long workSpaceId;
|
||||
|
||||
/**
|
||||
* 待删除角色所属单位ID 历史接口需要
|
||||
*/
|
||||
private Long outId;
|
||||
|
||||
/**
|
||||
* 历史接口对已经有user绑定到role有进行check,不能删除
|
||||
*/
|
||||
private boolean needUsedCheck;
|
||||
}
|
||||
@ -25,6 +25,7 @@ import cn.axzo.tyr.client.model.res.QueryRoleByNameResp;
|
||||
import cn.axzo.tyr.client.model.res.RoleTreeRes;
|
||||
import cn.axzo.tyr.client.model.res.RoleWithUserRes;
|
||||
import cn.axzo.tyr.client.model.res.SaasRoleRes;
|
||||
import cn.axzo.tyr.client.model.vo.DeleteRoleVO;
|
||||
import cn.axzo.tyr.client.model.vo.SaasRoleAndGroupVO;
|
||||
import cn.axzo.tyr.client.model.vo.SaasRoleCategoryVO;
|
||||
import cn.axzo.tyr.client.model.vo.SaasRoleGroupCodeVO;
|
||||
@ -135,13 +136,21 @@ public class SaasRoleController implements TyrSaasRoleApi {
|
||||
|
||||
@Override
|
||||
public ApiResult<Void> deleteRole(List<Long> roleIds, Long workSpaceId, Long outId) {
|
||||
roleService.deleteRole(roleIds, workSpaceId, outId);
|
||||
DeleteRoleVO deleteRoleParam = DeleteRoleVO.builder()
|
||||
.roleIds(roleIds)
|
||||
.workSpaceId(workSpaceId)
|
||||
.outId(outId)
|
||||
.needUsedCheck(true)
|
||||
.build();
|
||||
roleService.deleteRole(deleteRoleParam);
|
||||
permissionCacheService.markTempDisable(PermissionCacheKey.builder().disableAll(true).build());
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ApiResult<Void> delete(List<Long> roleIds) {
|
||||
public ApiResult<Void> delete(DeleteRoleVO reqeust) {
|
||||
roleService.deleteRole(reqeust);
|
||||
permissionCacheService.markTempDisable(PermissionCacheKey.builder().disableAll(true).build());
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
|
||||
@ -17,6 +17,7 @@ import cn.axzo.tyr.client.model.res.QueryBatchByIdentityIdTypeRes;
|
||||
import cn.axzo.tyr.client.model.res.QueryRoleByNameResp;
|
||||
import cn.axzo.tyr.client.model.res.RoleWithUserRes;
|
||||
import cn.axzo.tyr.client.model.res.SaasRoleRes;
|
||||
import cn.axzo.tyr.client.model.vo.DeleteRoleVO;
|
||||
import cn.axzo.tyr.client.model.vo.SaasRoleAndGroupVO;
|
||||
import cn.axzo.tyr.client.model.vo.SaasRoleCategoryVO;
|
||||
import cn.axzo.tyr.client.model.vo.SaasRoleGroupCodeVO;
|
||||
@ -100,11 +101,9 @@ public interface RoleService extends IService<SaasRole> {
|
||||
|
||||
/**
|
||||
* 删除角色列表
|
||||
* @param roleIds 待删除角色集合
|
||||
* @param workSpaceId 待删除角色所属workSpaceId
|
||||
* @param outId 待删除角色所属单位ID
|
||||
* @param deleteRoleParam
|
||||
*/
|
||||
void deleteRole(List<Long> roleIds,Long workSpaceId,Long outId);
|
||||
void deleteRole(DeleteRoleVO deleteRoleParam);
|
||||
|
||||
List<SaasRole> queryRoleByFeatures(Set<Long> matchedFeatureIds);
|
||||
|
||||
@ -142,6 +141,9 @@ public interface RoleService extends IService<SaasRole> {
|
||||
@CriteriaField(field = "isDisplay", operator = Operator.EQ)
|
||||
private Boolean isDisplay;
|
||||
|
||||
@CriteriaField(field = "roleCode", operator = Operator.EQ)
|
||||
private String roleCode;
|
||||
|
||||
@CriteriaField(ignore = true)
|
||||
private Boolean needPermission;
|
||||
|
||||
|
||||
@ -27,6 +27,7 @@ import cn.axzo.tyr.client.model.res.RoleWithUserRes;
|
||||
import cn.axzo.tyr.client.model.res.SaasPermissionRes;
|
||||
import cn.axzo.tyr.client.model.res.SaasRoleGroupRes;
|
||||
import cn.axzo.tyr.client.model.res.SaasRoleRes;
|
||||
import cn.axzo.tyr.client.model.vo.DeleteRoleVO;
|
||||
import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO;
|
||||
import cn.axzo.tyr.client.model.vo.SaasRoleAndGroupVO;
|
||||
import cn.axzo.tyr.client.model.vo.SaasRoleCategoryVO;
|
||||
@ -459,12 +460,39 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
return saasRoleDao.listRoleUserByPermissionGroup(permissionGroupIdList, workspaceIds);
|
||||
}
|
||||
|
||||
private void checkRoleCode(SaveOrUpdateRoleVO saveOrUpdateRole) {
|
||||
|
||||
if (StringUtils.isBlank(saveOrUpdateRole.getRoleCode())) {
|
||||
return;
|
||||
}
|
||||
List<SaasRoleRes> oldSaasRoles = this.list(ListSaasRoleParam.builder()
|
||||
.roleCode(saveOrUpdateRole.getRoleCode())
|
||||
.build());
|
||||
if (CollectionUtils.isNotEmpty(oldSaasRoles)) {
|
||||
throw new ServiceException("角色编码已存在");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* roleType = 自定义,common,workspaceType = saveOrUpdateRole.workspaceType
|
||||
* 其他就从角色组取,没有就saveOrUpdateRole.workspaceType
|
||||
* @param saveOrUpdateRole
|
||||
* @return
|
||||
*/
|
||||
private Integer resolveWorkspaceType(SaveOrUpdateRoleVO saveOrUpdateRole) {
|
||||
if (COMMON_ROLE_TYPES.contains(saveOrUpdateRole.getRoleType()) || CollectionUtils.isEmpty(saveOrUpdateRole.getGroupTree())) {
|
||||
return saveOrUpdateRole.getWorkspaceType();
|
||||
}
|
||||
return Integer.parseInt(saveOrUpdateRole.getGroupTree().get(0).getWorkspaceTypeCode());
|
||||
}
|
||||
|
||||
private SaasRole validAndBuildRole(SaveOrUpdateRoleVO saveOrUpdateRole, Date now) {
|
||||
SaasRole saasRole;
|
||||
if (Objects.isNull(saveOrUpdateRole.getId())) {
|
||||
saasRole = new SaasRole();
|
||||
saasRole.setCreateBy(saveOrUpdateRole.getOperatorId());
|
||||
saasRole.setCreateAt(now);
|
||||
checkRoleCode(saveOrUpdateRole);
|
||||
} else {
|
||||
saasRole = saasRoleDao.getById(saveOrUpdateRole.getId());
|
||||
if (Objects.isNull(saasRole)) {
|
||||
@ -479,14 +507,9 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
saasRole.setRoleType(saveOrUpdateRole.getRoleType());
|
||||
saasRole.setWorkspaceId(saveOrUpdateRole.getWorkspaceId());
|
||||
saasRole.setOwnerOuId(saveOrUpdateRole.getOwnerOuId());
|
||||
// roleType = 自定义,common,workspaceType = saveOrUpdateRole.workspaceType
|
||||
// 其他就从角色组取,没有就saveOrUpdateRole.workspaceType
|
||||
Integer workspaceType = null;
|
||||
if (COMMON_ROLE_TYPES.contains(saveOrUpdateRole.getRoleType()) || CollectionUtils.isEmpty(saveOrUpdateRole.getGroupTree())) {
|
||||
workspaceType = saveOrUpdateRole.getWorkspaceType();
|
||||
} else {
|
||||
workspaceType = Integer.parseInt(saveOrUpdateRole.getGroupTree().get(0).getWorkspaceTypeCode());
|
||||
}
|
||||
Integer workspaceType = resolveWorkspaceType(saveOrUpdateRole);
|
||||
saasRole.setWorkspaceType(workspaceType);
|
||||
|
||||
if (CollectionUtils.isNotEmpty(saveOrUpdateRole.getGroupTree())) {
|
||||
saasRole.setProductUnitType(setProductUnitType(saveOrUpdateRole.getGroupTree().get(0)));
|
||||
} else {
|
||||
@ -509,6 +532,7 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
systemAndCustomWorkspaceCodes.add(Long.valueOf(workspaceType));
|
||||
systemAndCustomWorkspaceCodes.add(-1L);
|
||||
|
||||
|
||||
List<Long> systemAndCustomOuIds = new ArrayList<>();
|
||||
systemAndCustomOuIds.add(saveOrUpdateRole.getOwnerOuId());
|
||||
systemAndCustomOuIds.add(-1L);
|
||||
@ -542,14 +566,19 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
}
|
||||
});
|
||||
}
|
||||
saasRole.setSort(saveOrUpdateRole.getSort());
|
||||
assembleSort(saveOrUpdateRole, saasRole);
|
||||
return saasRole;
|
||||
}
|
||||
|
||||
|
||||
private void assembleSort(SaveOrUpdateRoleVO saveOrUpdateRole, SaasRole saasRole) {
|
||||
if (saasRole.getSort() != null || saasRole.getId() != null || CollectionUtils.isEmpty(saveOrUpdateRole.getGroupTree())) {
|
||||
if (saveOrUpdateRole.getSort() != null) {
|
||||
saasRole.setSort(saveOrUpdateRole.getSort());
|
||||
return;
|
||||
}
|
||||
|
||||
// 新增时且没有传sort时,才自动维护一个最大的sort
|
||||
if (saasRole.getId() != null || CollectionUtils.isEmpty(saveOrUpdateRole.getGroupTree())) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -834,20 +863,26 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteRole(List<Long> roleIds, Long workSpaceId, Long ouId) {
|
||||
List<SaasRoleUserRelation> saasRoleUserRelations = roleUserRelationDao.lambdaQuery()
|
||||
.in(CollectionUtil.isNotEmpty(roleIds), SaasRoleUserRelation::getRoleId, roleIds)
|
||||
.eq(workSpaceId != null, SaasRoleUserRelation::getWorkspaceId, workSpaceId)
|
||||
.eq(ouId != null, SaasRoleUserRelation::getOuId, ouId)
|
||||
.eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value)
|
||||
.list();
|
||||
public void deleteRole(DeleteRoleVO deleteRoleParam) {
|
||||
|
||||
if (CollectionUtil.isNotEmpty(saasRoleUserRelations)) {
|
||||
throw new cn.axzo.basics.common.exception.ServiceException("当前角色已被用户使用,无法删除!");
|
||||
if (BooleanUtils.isTrue(deleteRoleParam.isNeedUsedCheck())) {
|
||||
List<SaasRoleUserRelation> saasRoleUserRelations = roleUserRelationDao.lambdaQuery()
|
||||
.in(CollectionUtil.isNotEmpty(deleteRoleParam.getRoleIds()), SaasRoleUserRelation::getRoleId, deleteRoleParam.getRoleIds())
|
||||
.eq(deleteRoleParam.getWorkSpaceId() != null, SaasRoleUserRelation::getWorkspaceId, deleteRoleParam.getWorkSpaceId())
|
||||
.eq(deleteRoleParam.getOutId() != null, SaasRoleUserRelation::getOuId, deleteRoleParam.getOutId())
|
||||
.eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value)
|
||||
.list();
|
||||
|
||||
if (CollectionUtil.isNotEmpty(saasRoleUserRelations)) {
|
||||
throw new cn.axzo.basics.common.exception.ServiceException("当前角色已被用户使用,无法删除!");
|
||||
}
|
||||
}
|
||||
saasRoleDao.delete(roleIds);
|
||||
roleUserRelationDao.deleteByRoleId(roleIds);
|
||||
roleGroupRelationDao.deleteGroupRelation(roleIds);
|
||||
|
||||
saasRoleDao.delete(deleteRoleParam.getRoleIds());
|
||||
// 未根据id进行更新,会存在死锁的风险,但是角色的操作频率很低,可以先不考虑
|
||||
roleUserRelationDao.deleteByRoleId(deleteRoleParam.getRoleIds());
|
||||
roleGroupRelationDao.deleteGroupRelation(deleteRoleParam.getRoleIds());
|
||||
saasPgroupRoleRelationDao.deleteByRoleId(deleteRoleParam.getRoleIds());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -1162,14 +1197,7 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
return permissionIds.stream()
|
||||
.map(permissionId -> {
|
||||
SaasPermissionRes saasPermissionRes = resourcePermissions.get(permissionId);
|
||||
if (saasPermissionRes == null) {
|
||||
return null;
|
||||
}
|
||||
return SaasPermissionWrapper.builder()
|
||||
.id(saasPermissionRes.getId())
|
||||
.featureCode(saasPermissionRes.getFeatureCode())
|
||||
.roleId(e.getRoleId())
|
||||
.build();
|
||||
return SaasPermissionWrapper.from(e, saasPermissionRes);
|
||||
})
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
@ -1196,6 +1224,18 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
private String featureCode;
|
||||
|
||||
private Long roleId;
|
||||
|
||||
public static SaasPermissionWrapper from(SaasPgroupRoleRelation saasPgroupRoleRelation,
|
||||
SaasPermissionRes saasPermissionRes) {
|
||||
if (saasPermissionRes == null) {
|
||||
return null;
|
||||
}
|
||||
return SaasPermissionWrapper.builder()
|
||||
.id(saasPermissionRes.getId())
|
||||
.featureCode(saasPermissionRes.getFeatureCode())
|
||||
.roleId(saasPgroupRoleRelation.getRoleId())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
private Map<Long, List<SaasRoleGroupRes>> listRoleGroups(PageSaasRoleParam param,
|
||||
@ -1220,18 +1260,23 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
|
||||
.collect(Collectors.toMap(SaasRoleGroup::getId, Function.identity()));
|
||||
|
||||
return roleGroupRelations.stream()
|
||||
.filter(e -> saasRoleGroups.get(e.getSaasRoleGroupId()) != null)
|
||||
.collect(Collectors.groupingBy(SaasRoleGroupRelation::getRoleId,
|
||||
Collectors.mapping(e -> {
|
||||
SaasRoleGroup saasRoleGroup = saasRoleGroups.get(e.getSaasRoleGroupId());
|
||||
if (saasRoleGroup == null) {
|
||||
return null;
|
||||
}
|
||||
SaasRoleGroupRes saasRoleGroupRes = SaasRoleGroupRes.builder().build();
|
||||
BeanUtils.copyProperties(saasRoleGroup, saasRoleGroupRes);
|
||||
return saasRoleGroupRes;
|
||||
return toRoleGroupRes(saasRoleGroup);
|
||||
}, Collectors.toList())));
|
||||
}
|
||||
|
||||
private SaasRoleGroupRes toRoleGroupRes(SaasRoleGroup saasRoleGroup) {
|
||||
if (saasRoleGroup == null) {
|
||||
return null;
|
||||
}
|
||||
SaasRoleGroupRes saasRoleGroupRes = SaasRoleGroupRes.builder().build();
|
||||
BeanUtils.copyProperties(saasRoleGroup, saasRoleGroupRes);
|
||||
return saasRoleGroupRes;
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void saveOrUpdateFeatureRoleRelation(List<FeatureRoleRelationReq> req, Long operatorId) {
|
||||
for (FeatureRoleRelationReq item : req) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user