1、仿真策划时,对删除的节点做权限校验

This commit is contained in:
2026-01-20 20:21:03 +08:00
parent 59ae474678
commit cd0c367fa6
4 changed files with 107 additions and 7 deletions

View File

@@ -92,4 +92,6 @@ public interface SimulationNodeMapper extends BaseMapper<SimulationNode> {
SpdmNodeVo getNodeByProjectIdAndName(@Param("projectId") String projectId, @Param("projectName") String projectName);
List<PerformanceNodePo> getPerformanceListByIdList(@Param("taskIdList") List<String> taskIdList);
}

View File

@@ -59,4 +59,6 @@ public interface SimulationTaskMapper extends BaseMapper<SimulationTask> {
List<SpdmAnalysisTaskVo> getAnalysisTask(@Param("taskNodeId") String taskNodeId);
List<SpdmTaskVo> getTaskListByIdList(@Param("taskIdList") List<String> taskIdList);
}

View File

@@ -10,11 +10,13 @@ import com.sdm.common.common.ThreadLocalContext;
import com.sdm.common.entity.ExportExcelFormat;
import com.sdm.common.entity.enums.*;
import com.sdm.common.entity.req.data.*;
import com.sdm.common.entity.req.project.SimulationPerformance;
import com.sdm.common.entity.req.system.SendMsgReq;
import com.sdm.common.entity.req.system.UserQueryReq;
import com.sdm.common.entity.req.task.TaskTreeExportExcelFormat;
import com.sdm.common.entity.req.task.TaskTreeExportExcelParam;
import com.sdm.common.entity.resp.data.FileMetadataInfoResp;
import com.sdm.common.entity.resp.project.SpdmTaskVo;
import com.sdm.common.entity.resp.project.TaskNodeExtraPo;
import com.sdm.common.entity.resp.system.CIDUserResp;
import com.sdm.common.feign.impl.data.DataClientFeignClientImpl;
@@ -41,9 +43,11 @@ import com.sdm.project.model.entity.SimulationTaskMember;
import com.sdm.project.model.po.*;
import com.sdm.project.model.req.*;
import com.sdm.project.model.vo.SpdmNodeExtraVo;
import com.sdm.project.model.vo.SpdmNodeMemberVo;
import com.sdm.project.model.vo.SpdmNodeVo;
import com.sdm.project.service.IProjectService;
import com.sdm.project.service.ISimulationPerformanceExtraService;
import com.sdm.project.service.ISimulationPerformanceService;
import com.sdm.project.service.ISimulationTaskMemberService;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
@@ -91,6 +95,10 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
@Autowired
private ISimulationPerformanceExtraService performanceExtraService;
@Autowired
private ISimulationPerformanceService performanceService;
@Autowired
SysUserFeignClientImpl sysUserFeignClient;
@@ -1839,6 +1847,9 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
if (mapper.batchAddSimulationNodeMember(projectNodeMemberList) <= 0) {
response = SdmResponse.failed("添加节点成员属性失败");
}
for (TaskMemberNode taskMemberNode : projectNodeMemberList) {
updatePermission(userId,taskMemberNode.getUuid());
}
}
if (CollectionUtils.isNotEmpty(taskNodeList)) {
@@ -1907,6 +1918,9 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
response = SdmResponse.failed("新增任务成员属性失败");
return response;
}
for (TaskMemberNode taskMemberNode : taskNodeMemberList) {
updatePermission(userId,taskMemberNode.getUuid());
}
}
if (CollectionUtils.isNotEmpty(projectNodePerformanceList)) {
projectNodePerformanceList.forEach(projectNode -> projectNode.setCreateTime(createTime));
@@ -2356,16 +2370,89 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
}
if (CollectionUtils.isNotEmpty(deleteNodeList)) {
log.info("删除节点参数为:{}",deleteNodeList);
List<String> nodeIdList = deleteNodeList.stream().map(SpdmDeleteProjectDetailReq::getUuid).toList();
List<SpdmNodeVo> nodeList = nodeMapper.getNodeListByIds(nodeIdList);
Long userId = ThreadLocalContext.getUserId();
List<SpdmDeleteProjectDetailReq> nodeList = deleteNodeList.stream().filter(node -> NodeTypeEnum.MACHINE.getValue().equals(node.getNodeType()) || NodeTypeEnum.WORKSPACE.getValue().equals(node.getNodeType())).toList();
List<SpdmDeleteProjectDetailReq> taskList = deleteNodeList.stream().filter(node -> NodeTypeEnum.TASK.getValue().equals(node.getNodeType())).toList();
List<SpdmDeleteProjectDetailReq> performanceList = deleteNodeList.stream().filter(node -> NodeTypeEnum.PERFORMANCE.getValue().equals(node.getNodeType())).toList();
if (CollectionUtils.isNotEmpty(nodeList)) {
List<Long> userIdList = nodeList.stream().map(SpdmNodeVo::getCreator).distinct().toList();
Long userId = ThreadLocalContext.getUserId();
if (!userIdList.contains(userId)) {
log.error("userIdList为{}当前用户id为{},无权限删除节点",userIdList,userId);
return SdmResponse.failed("无权限删除此节点");
List<String> nodeIdList = nodeList.stream().map(SpdmDeleteProjectDetailReq::getUuid).toList();
List<SpdmNodeVo> nodeListByIds = nodeMapper.getNodeListByIds(nodeIdList);
List<Long> nodeUserIdList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(nodeListByIds)) {
List<Long> creatorUserIdList = nodeListByIds.stream().filter(node -> ObjectUtils.isNotEmpty(node.getCreator())).map(SpdmNodeVo::getCreator).toList();
if (CollectionUtils.isNotEmpty(creatorUserIdList)) {
nodeUserIdList.addAll(creatorUserIdList);
}
}
List<SpdmNodeMemberVo> nodeMemberListByNodeIdList = nodeMapper.getNodeMemberListByNodeIdList(nodeIdList);
if (CollectionUtils.isNotEmpty(nodeMemberListByNodeIdList)) {
List<Long> memberUserIdList = nodeMemberListByNodeIdList.stream().map(SpdmNodeMemberVo::getUserId).distinct().toList();
if (CollectionUtils.isNotEmpty(memberUserIdList)) {
nodeUserIdList.addAll(memberUserIdList);
}
}
if (CollectionUtils.isNotEmpty(nodeUserIdList)) {
if (!nodeUserIdList.contains(userId)) {
log.error("nodeUserIdList为{}当前用户id为{},无权限删除节点",nodeUserIdList,userId);
return SdmResponse.failed("无权限删除节点");
}
}
}
if (CollectionUtils.isNotEmpty(taskList)) {
List<String> taskIdList = taskList.stream().map(SpdmDeleteProjectDetailReq::getUuid).toList();
List<SpdmTaskVo> taskListByIds = taskMapper.getTaskListByIdList(taskIdList);
List<Long> taskUserIdList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(taskListByIds)) {
List<Long> creatorUserIdList = taskListByIds.stream().filter(task -> ObjectUtils.isNotEmpty(task.getCreator())).map(SpdmTaskVo::getCreator).toList();
if (CollectionUtils.isNotEmpty(creatorUserIdList)) {
taskUserIdList.addAll(creatorUserIdList);
}
}
List<TaskNodeMemberPo> taskMemberListByNodeIdList = nodeMapper.getTaskMemberListByNodeIdList(taskIdList);
if (CollectionUtils.isNotEmpty(taskMemberListByNodeIdList)) {
List<Long> memberUserIdList = taskMemberListByNodeIdList.stream().map(TaskNodeMemberPo::getUserId).distinct().toList();
if (CollectionUtils.isNotEmpty(memberUserIdList)) {
taskUserIdList.addAll(memberUserIdList);
}
}
if (CollectionUtils.isNotEmpty(taskUserIdList)) {
if (!taskUserIdList.contains(userId)) {
log.error("taskUserIdList为{}当前用户id为{},无权限删除任务",taskUserIdList,userId);
return SdmResponse.failed("无权限删除任务");
}
}
}
if (CollectionUtils.isNotEmpty(performanceList)) {
List<String> performanceIdList = performanceList.stream().map(SpdmDeleteProjectDetailReq::getUuid).toList();
List<SimulationPerformance> performances = performanceService.lambdaQuery().in(SimulationPerformance::getUuid, performanceIdList).list();
if (CollectionUtils.isNotEmpty(performances)) {
List<String> taskIdList = performances.stream().filter(performance -> StringUtils.isNotBlank(performance.getTaskId())).map(SimulationPerformance::getTaskId).toList();
List<SpdmTaskVo> taskListByIds = taskMapper.getTaskListByIdList(taskIdList);
List<Long> performanceUserIdList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(taskListByIds)) {
List<Long> creatorUserIdList = taskListByIds.stream().filter(task -> ObjectUtils.isNotEmpty(task.getCreator())).map(SpdmTaskVo::getCreator).toList();
if (CollectionUtils.isNotEmpty(creatorUserIdList)) {
performanceUserIdList.addAll(creatorUserIdList);
}
}
List<TaskNodeMemberPo> taskMemberListByNodeIdList = nodeMapper.getTaskMemberListByNodeIdList(taskIdList);
if (CollectionUtils.isNotEmpty(taskMemberListByNodeIdList)) {
List<Long> memberUserIdList = taskMemberListByNodeIdList.stream().map(TaskNodeMemberPo::getUserId).distinct().toList();
if (CollectionUtils.isNotEmpty(memberUserIdList)) {
performanceUserIdList.addAll(memberUserIdList);
}
}
if (CollectionUtils.isNotEmpty(performanceUserIdList)) {
if (!performanceUserIdList.contains(userId)) {
log.error("performanceUserIdList为{}当前用户id为{},无权限删除指标",performanceUserIdList,userId);
return SdmResponse.failed("无权限删除任务");
}
}
}
}
SpdmDeleteProjectReq spdmDeleteProjectReq = new SpdmDeleteProjectReq();
spdmDeleteProjectReq.setDeleteNodeList(deleteNodeList);
SdmResponse response = delete(spdmDeleteProjectReq);

View File

@@ -425,5 +425,14 @@
select * from simulation_task where uuid = #{taskNodeId} order by create_time desc
</select>
<select id="getTaskListByIdList" resultType="com.sdm.common.entity.resp.project.SpdmTaskVo">
select * from simulation_task where uuid in
(
<foreach collection='taskIdList' item='taskId' index='index' separator=','>
#{taskId}
</foreach>
)
</select>
</mapper>