use of com.diboot.iam.dto.IamResourcePermissionDTO in project diboot by dibo-software.
the class IamResourcePermissionServiceImpl method updateMenuAndPermissions.
@Override
@Transactional(rollbackFor = Exception.class)
public void updateMenuAndPermissions(IamResourcePermissionDTO iamResourcePermissionDTO) {
// 检查是否设置了自身id为parentId,如果设置parentId与自身id相同,将会导致非常严重的潜在隐患
if (V.equals(iamResourcePermissionDTO.getId(), iamResourcePermissionDTO.getParentId())) {
throw new BusinessException(Status.FAIL_OPERATION, "不可设置父级菜单资源为自身");
}
// 设置menu的接口列表
if (V.notEmpty(iamResourcePermissionDTO.getApiSetList())) {
iamResourcePermissionDTO.setApiSet(S.join(iamResourcePermissionDTO.getApiSetList(), ","));
}
// 更新menu
this.updateEntity(iamResourcePermissionDTO);
List<IamResourcePermissionDTO> permissionList = iamResourcePermissionDTO.getPermissionList();
permissionList.forEach(p -> {
p.setParentId(iamResourcePermissionDTO.getId());
p.setDisplayType(Cons.RESOURCE_PERMISSION_DISPLAY_TYPE.PERMISSION.name());
});
// 需要更新的列表
List<IamResourcePermissionDTO> updatePermissionList = permissionList.stream().filter(p -> V.notEmpty(p.getId())).collect(Collectors.toList());
// 需要新建的列表
List<IamResourcePermissionDTO> createPermissionDTOList = permissionList.stream().filter(p -> V.isEmpty(p.getId())).collect(Collectors.toList());
List<Long> updatePermissionIdList = updatePermissionList.stream().map(IamResourcePermission::getId).collect(Collectors.toList());
// 批量删除不存在的按钮/权限列表
List<IamResourcePermission> oldPermissionList = this.getEntityList(Wrappers.<IamResourcePermission>lambdaQuery().eq(IamResourcePermission::getParentId, iamResourcePermissionDTO.getId()).eq(IamResourcePermission::getDisplayType, Cons.RESOURCE_PERMISSION_DISPLAY_TYPE.PERMISSION));
if (V.notEmpty(oldPermissionList)) {
LambdaQueryWrapper<IamResourcePermission> deleteWrapper = Wrappers.<IamResourcePermission>lambdaQuery().eq(IamResourcePermission::getParentId, iamResourcePermissionDTO.getId()).eq(IamResourcePermission::getDisplayType, Cons.RESOURCE_PERMISSION_DISPLAY_TYPE.PERMISSION);
if (V.notEmpty(updatePermissionIdList)) {
deleteWrapper.notIn(IamResourcePermission::getId, updatePermissionIdList);
}
this.deleteEntities(deleteWrapper);
}
// 批量新建按钮/权限列表
if (V.notEmpty(createPermissionDTOList)) {
List<IamResourcePermission> createPermissionList = BeanUtils.convertList(createPermissionDTOList, IamResourcePermission.class);
this.createEntities(createPermissionList);
}
// 批量更新按钮/权限列表
if (V.notEmpty(updatePermissionList)) {
for (IamResourcePermissionDTO updatePermission : updatePermissionList) {
this.updateEntity(updatePermission);
}
}
// 检测是否有脏数据存在
if (hasDirtyData()) {
throw new BusinessException(Status.FAIL_OPERATION, "父级节点不可设置在自己的子节点上");
}
// 清理脏数据
// this.clearDirtyData();
}
Aggregations