refactor(测试跟踪): 补充测试跟踪接口权限校验

This commit is contained in:
chenjianxing 2023-06-12 14:10:28 +08:00 committed by fit2-zhao
parent aa2ad71b63
commit 0c198d750b
20 changed files with 235 additions and 295 deletions

View File

@ -90,6 +90,7 @@ public class PermissionConstants {
public static final String PROJECT_OPERATING_LOG_READ = "PROJECT_OPERATING_LOG:READ"; public static final String PROJECT_OPERATING_LOG_READ = "PROJECT_OPERATING_LOG:READ";
public static final String PROJECT_TRACK_HOME = "PROJECT_TRACK_HOME:READ";
public static final String PROJECT_TRACK_CASE_READ = "PROJECT_TRACK_CASE:READ"; public static final String PROJECT_TRACK_CASE_READ = "PROJECT_TRACK_CASE:READ";
public static final String PROJECT_TRACK_CASE_READ_CREATE = "PROJECT_TRACK_CASE:READ+CREATE"; public static final String PROJECT_TRACK_CASE_READ_CREATE = "PROJECT_TRACK_CASE:READ+CREATE";
public static final String PROJECT_TRACK_CASE_READ_EDIT = "PROJECT_TRACK_CASE:READ+EDIT"; public static final String PROJECT_TRACK_CASE_READ_EDIT = "PROJECT_TRACK_CASE:READ+EDIT";
@ -98,6 +99,11 @@ public class PermissionConstants {
public static final String PROJECT_TRACK_CASE_READ_COPY = "PROJECT_TRACK_CASE:READ+COPY"; public static final String PROJECT_TRACK_CASE_READ_COPY = "PROJECT_TRACK_CASE:READ+COPY";
public static final String PROJECT_TRACK_CASE_READ_IMPORT = "PROJECT_TRACK_CASE:READ+IMPORT"; public static final String PROJECT_TRACK_CASE_READ_IMPORT = "PROJECT_TRACK_CASE:READ+IMPORT";
public static final String PROJECT_TRACK_CASE_READ_EXPORT = "PROJECT_TRACK_CASE:READ+EXPORT"; public static final String PROJECT_TRACK_CASE_READ_EXPORT = "PROJECT_TRACK_CASE:READ+EXPORT";
public static final String PROJECT_TRACK_CASE_READ_BATCH_DELETE = "PROJECT_TRACK_CASE:READ+BATCH_DELETE";
public static final String PROJECT_TRACK_CASE_READ_BATCH_ADD_PUBLIC = "PROJECT_TRACK_CASE:READ+BATCH_ADD_PUBLIC";
public static final String PROJECT_TRACK_CASE_READ_BATCH_EDIT = "PROJECT_TRACK_CASE:READ+BATCH_EDIT";
public static final String PROJECT_TRACK_CASE_READ_MOVE_EDIT = "PROJECT_TRACK_CASE:READ+BATCH_MOVE";
public static final String PROJECT_TRACK_CASE_READ_BATCH_COPY = "PROJECT_TRACK_CASE:READ+BATCH_COPY";
public static final String PROJECT_TRACK_REVIEW_READ = "PROJECT_TRACK_REVIEW:READ"; public static final String PROJECT_TRACK_REVIEW_READ = "PROJECT_TRACK_REVIEW:READ";
public static final String PROJECT_TRACK_REVIEW_READ_CREATE = "PROJECT_TRACK_REVIEW:READ+CREATE"; public static final String PROJECT_TRACK_REVIEW_READ_CREATE = "PROJECT_TRACK_REVIEW:READ+CREATE";
@ -214,7 +220,6 @@ public class PermissionConstants {
public static final String PROJECT_TEMPLATE_READ_CUSTOM = "PROJECT_TEMPLATE:READ+CUSTOM"; public static final String PROJECT_TEMPLATE_READ_CUSTOM = "PROJECT_TEMPLATE:READ+CUSTOM";
public static final String PROJECT_TEMPLATE_READ_REPORT_TEMPLATE = "PROJECT_TEMPLATE:READ+REPORT_TEMPLATE"; public static final String PROJECT_TEMPLATE_READ_REPORT_TEMPLATE = "PROJECT_TEMPLATE:READ+REPORT_TEMPLATE";
public static final String WORKSPACE_PROJECT_ENVIRONMENT_GROUP_READ = "WORKSPACE_PROJECT_ENVIRONMENT:READ+CREATE_GROUP"; public static final String WORKSPACE_PROJECT_ENVIRONMENT_GROUP_READ = "WORKSPACE_PROJECT_ENVIRONMENT:READ+CREATE_GROUP";
public static final String WORKSPACE_PROJECT_ENVIRONMENT_GROUP_DELETE = "WORKSPACE_PROJECT_ENVIRONMENT:READ+DELETE_GROUP"; public static final String WORKSPACE_PROJECT_ENVIRONMENT_GROUP_DELETE = "WORKSPACE_PROJECT_ENVIRONMENT:READ+DELETE_GROUP";
public static final String WORKSPACE_PROJECT_ENVIRONMENT_GROUP_EDIT = "WORKSPACE_PROJECT_ENVIRONMENT:READ+EDIT_GROUP"; public static final String WORKSPACE_PROJECT_ENVIRONMENT_GROUP_EDIT = "WORKSPACE_PROJECT_ENVIRONMENT:READ+EDIT_GROUP";
@ -223,4 +228,7 @@ public class PermissionConstants {
public static final String SYSTEM_PLUGIN_DEL = "SYSTEM_PLUGIN:DEL"; public static final String SYSTEM_PLUGIN_DEL = "SYSTEM_PLUGIN:DEL";
public static final String SYSTEM_PLUGIN_UPLOAD = "SYSTEM_PLUGIN:UPLOAD"; public static final String SYSTEM_PLUGIN_UPLOAD = "SYSTEM_PLUGIN:UPLOAD";
public static final String SYSTEM_PLUGIN_READ = "SYSTEM_PLUGIN:READ"; public static final String SYSTEM_PLUGIN_READ = "SYSTEM_PLUGIN:READ";
public static final String PERSONAL_INFORMATION_READ_THIRD_ACCOUNT = "PERSONAL_INFORMATION:READ+THIRD_ACCOUNT";
} }

View File

@ -3,11 +3,14 @@ package io.metersphere.controller;
import io.metersphere.base.domain.FileAttachmentMetadata; import io.metersphere.base.domain.FileAttachmentMetadata;
import io.metersphere.commons.constants.OperLogConstants; import io.metersphere.commons.constants.OperLogConstants;
import io.metersphere.commons.constants.OperLogModule; import io.metersphere.commons.constants.OperLogModule;
import io.metersphere.commons.constants.PermissionConstants;
import io.metersphere.log.annotation.MsAuditLog; import io.metersphere.log.annotation.MsAuditLog;
import io.metersphere.metadata.service.FileMetadataService; import io.metersphere.metadata.service.FileMetadataService;
import io.metersphere.request.attachment.AttachmentDumpRequest; import io.metersphere.request.attachment.AttachmentDumpRequest;
import io.metersphere.xpack.track.dto.AttachmentRequest; import io.metersphere.xpack.track.dto.AttachmentRequest;
import io.metersphere.service.AttachmentService; import io.metersphere.service.AttachmentService;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
@ -32,12 +35,14 @@ public class AttachmentController {
@MsAuditLog(module = OperLogModule.TRACK_BUG, type = OperLogConstants.UPDATE, content = "#msClass.getLogDetails(#request.belongId, #request.belongType, #file.getOriginalFilename(), false)", msClass = AttachmentService.class) @MsAuditLog(module = OperLogModule.TRACK_BUG, type = OperLogConstants.UPDATE, content = "#msClass.getLogDetails(#request.belongId, #request.belongType, #file.getOriginalFilename(), false)", msClass = AttachmentService.class)
@PostMapping(value = "/issue/upload", consumes = {"multipart/form-data"}) @PostMapping(value = "/issue/upload", consumes = {"multipart/form-data"})
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ_EDIT)
public void uploadIssueAttachment(@RequestPart("request") AttachmentRequest request, @RequestPart(value = "file", required = false) MultipartFile file) { public void uploadIssueAttachment(@RequestPart("request") AttachmentRequest request, @RequestPart(value = "file", required = false) MultipartFile file) {
attachmentService.uploadAttachment(request, file); attachmentService.uploadAttachment(request, file);
} }
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.UPDATE, content = "#msClass.getLogDetails(#request.belongId, #request.belongType, #file.getOriginalFilename(), false)", msClass = AttachmentService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.UPDATE, content = "#msClass.getLogDetails(#request.belongId, #request.belongType, #file.getOriginalFilename(), false)", msClass = AttachmentService.class)
@PostMapping(value = "/testcase/upload", consumes = {"multipart/form-data"}) @PostMapping(value = "/testcase/upload", consumes = {"multipart/form-data"})
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT)
public void uploadTestCaseAttachment(@RequestPart("request") AttachmentRequest request, @RequestPart(value = "file", required = false) MultipartFile file) { public void uploadTestCaseAttachment(@RequestPart("request") AttachmentRequest request, @RequestPart(value = "file", required = false) MultipartFile file) {
attachmentService.uploadAttachment(request, file); attachmentService.uploadAttachment(request, file);
} }
@ -58,6 +63,7 @@ public class AttachmentController {
} }
@GetMapping("/download/{id}/{isLocal}") @GetMapping("/download/{id}/{isLocal}")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ, PermissionConstants.PROJECT_TRACK_ISSUE_READ}, logical = Logical.OR)
public ResponseEntity<byte[]> downloadAttachment(@PathVariable("id") String fileId, @PathVariable("isLocal") Boolean isLocal) { public ResponseEntity<byte[]> downloadAttachment(@PathVariable("id") String fileId, @PathVariable("isLocal") Boolean isLocal) {
if (isLocal) { if (isLocal) {
return attachmentService.downloadLocalAttachment(fileId); return attachmentService.downloadLocalAttachment(fileId);
@ -69,46 +75,54 @@ public class AttachmentController {
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogDetails(#attachmentId, 'testcase')", msClass = AttachmentService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogDetails(#attachmentId, 'testcase')", msClass = AttachmentService.class)
@GetMapping("/delete/testcase/{attachmentId}") @GetMapping("/delete/testcase/{attachmentId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT)
public void deleteTestCaseAttachment(@PathVariable String attachmentId) { public void deleteTestCaseAttachment(@PathVariable String attachmentId) {
attachmentService.deleteAttachment(attachmentId, "testcase"); attachmentService.deleteAttachment(attachmentId, "testcase");
} }
@MsAuditLog(module = OperLogModule.TRACK_BUG, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogDetails(#attachmentId, 'issue')", msClass = AttachmentService.class) @MsAuditLog(module = OperLogModule.TRACK_BUG, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogDetails(#attachmentId, 'issue')", msClass = AttachmentService.class)
@GetMapping("/delete/issue/{attachmentId}") @GetMapping("/delete/issue/{attachmentId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ_EDIT)
public void deleteIssueAttachment(@PathVariable String attachmentId) { public void deleteIssueAttachment(@PathVariable String attachmentId) {
attachmentService.deleteAttachment(attachmentId, "issue"); attachmentService.deleteAttachment(attachmentId, "issue");
} }
@PostMapping("/metadata/list") @PostMapping("/metadata/list")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ, PermissionConstants.PROJECT_TRACK_ISSUE_READ}, logical = Logical.OR)
public List<FileAttachmentMetadata> listMetadata(@RequestBody AttachmentRequest request) { public List<FileAttachmentMetadata> listMetadata(@RequestBody AttachmentRequest request) {
return attachmentService.listMetadata(request); return attachmentService.listMetadata(request);
} }
@PostMapping("/testcase/metadata/relate") @PostMapping("/testcase/metadata/relate")
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.UPDATE, content = "#msClass.getLogDetails(#request.belongId, #request.belongType, #request.metadataRefIds, true)", msClass = AttachmentService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.UPDATE, content = "#msClass.getLogDetails(#request.belongId, #request.belongType, #request.metadataRefIds, true)", msClass = AttachmentService.class)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT)
public void caseRelate(@RequestBody AttachmentRequest request) { public void caseRelate(@RequestBody AttachmentRequest request) {
attachmentService.relate(request); attachmentService.relate(request);
} }
@PostMapping("/issue/metadata/relate") @PostMapping("/issue/metadata/relate")
@MsAuditLog(module = OperLogModule.TRACK_BUG, type = OperLogConstants.UPDATE, content = "#msClass.getLogDetails(#request.belongId, #request.belongType, #request.metadataRefIds, true)", msClass = AttachmentService.class) @MsAuditLog(module = OperLogModule.TRACK_BUG, type = OperLogConstants.UPDATE, content = "#msClass.getLogDetails(#request.belongId, #request.belongType, #request.metadataRefIds, true)", msClass = AttachmentService.class)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ_EDIT)
public void issueRelate(@RequestBody AttachmentRequest request) { public void issueRelate(@RequestBody AttachmentRequest request) {
attachmentService.relate(request); attachmentService.relate(request);
} }
@PostMapping("/testcase/metadata/unrelated") @PostMapping("/testcase/metadata/unrelated")
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogDetails(#request.belongId, #request.belongType, #request.metadataRefIds)", msClass = AttachmentService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogDetails(#request.belongId, #request.belongType, #request.metadataRefIds)", msClass = AttachmentService.class)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT)
public void caseUnrelated(@RequestBody AttachmentRequest request) { public void caseUnrelated(@RequestBody AttachmentRequest request) {
attachmentService.unrelated(request); attachmentService.unrelated(request);
} }
@PostMapping("/issue/metadata/unrelated") @PostMapping("/issue/metadata/unrelated")
@MsAuditLog(module = OperLogModule.TRACK_BUG, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogDetails(#request.belongId, #request.belongType, #request.metadataRefIds)", msClass = AttachmentService.class) @MsAuditLog(module = OperLogModule.TRACK_BUG, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogDetails(#request.belongId, #request.belongType, #request.metadataRefIds)", msClass = AttachmentService.class)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ_EDIT)
public void issueUnrelated(@RequestBody AttachmentRequest request) { public void issueUnrelated(@RequestBody AttachmentRequest request) {
attachmentService.unrelated(request); attachmentService.unrelated(request);
} }
@PostMapping(value = "/metadata/dump") @PostMapping(value = "/metadata/dump")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT, PermissionConstants.PROJECT_TRACK_ISSUE_READ_EDIT}, logical = Logical.OR)
public void dumpFile(@RequestBody AttachmentDumpRequest request) { public void dumpFile(@RequestBody AttachmentDumpRequest request) {
List<MultipartFile> files = new ArrayList<>(); List<MultipartFile> files = new ArrayList<>();
MultipartFile file = attachmentService.getAttachmentMultipartFile(request.getAttachmentId()); MultipartFile file = attachmentService.getAttachmentMultipartFile(request.getAttachmentId());

View File

@ -29,7 +29,7 @@ public class IssueCommentController {
private IssueCommentService issueCommentService; private IssueCommentService issueCommentService;
@PostMapping("/save") @PostMapping("/save")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REVIEW_READ_COMMENT) @RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ_EDIT)
@SendNotice(taskType = NoticeConstants.TaskType.DEFECT_TASK, target = "#targetClass.getIssue(#request.issuesId)", targetClass = IssuesService.class, @SendNotice(taskType = NoticeConstants.TaskType.DEFECT_TASK, target = "#targetClass.getIssue(#request.issuesId)", targetClass = IssuesService.class,
event = NoticeConstants.Event.COMMENT, subject = "缺陷") event = NoticeConstants.Event.COMMENT, subject = "缺陷")
@MsRequestLog(module = OperLogModule.TRACK_BUG) @MsRequestLog(module = OperLogModule.TRACK_BUG)
@ -39,19 +39,20 @@ public class IssueCommentController {
} }
@GetMapping("/list/{issueId}") @GetMapping("/list/{issueId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ)
public List<IssueCommentDTO> getComments(@PathVariable String issueId) { public List<IssueCommentDTO> getComments(@PathVariable String issueId) {
return issueCommentService.getComments(issueId); return issueCommentService.getComments(issueId);
} }
@GetMapping("/delete/{commentId}") @GetMapping("/delete/{commentId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REVIEW_READ_COMMENT) @RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ_EDIT)
@MsAuditLog(module = OperLogModule.TRACK_BUG, type = OperLogConstants.DELETE, beforeEvent = "#msClass.getLogDetails(#commentId)", msClass = TestCaseCommentService.class) @MsAuditLog(module = OperLogModule.TRACK_BUG, type = OperLogConstants.DELETE, beforeEvent = "#msClass.getLogDetails(#commentId)", msClass = TestCaseCommentService.class)
public void deleteComment(@PathVariable String commentId) { public void deleteComment(@PathVariable String commentId) {
issueCommentService.delete(commentId); issueCommentService.delete(commentId);
} }
@PostMapping("/edit") @PostMapping("/edit")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REVIEW_READ_COMMENT) @RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ_EDIT)
@MsAuditLog(module = OperLogModule.TRACK_BUG, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogDetails(#request.id)", content = "#msClass.getLogDetails(#request.id)", msClass = TestCaseCommentService.class) @MsAuditLog(module = OperLogModule.TRACK_BUG, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogDetails(#request.id)", content = "#msClass.getLogDetails(#request.id)", msClass = TestCaseCommentService.class)
public IssueComment editComment(@RequestBody SaveIssueCommentRequest request) { public IssueComment editComment(@RequestBody SaveIssueCommentRequest request) {
return issueCommentService.edit(request); return issueCommentService.edit(request);

View File

@ -117,22 +117,26 @@ public class IssuesController {
} }
@GetMapping("/auth/{workspaceId}/{platform}") @GetMapping("/auth/{workspaceId}/{platform}")
@RequiresPermissions(PermissionConstants.WORKSPACE_SERVICE_READ)
public void testAuth(@PathVariable String workspaceId, @PathVariable String platform) { public void testAuth(@PathVariable String workspaceId, @PathVariable String platform) {
issuesService.testAuth(workspaceId, platform); issuesService.testAuth(workspaceId, platform);
} }
@PostMapping("/user/auth") @PostMapping("/user/auth")
@RequiresPermissions(PermissionConstants.PERSONAL_INFORMATION_READ_THIRD_ACCOUNT)
public void userAuth(@RequestBody AuthUserIssueRequest authUserIssueRequest) { public void userAuth(@RequestBody AuthUserIssueRequest authUserIssueRequest) {
issuesService.userAuth(authUserIssueRequest); issuesService.userAuth(authUserIssueRequest);
} }
@GetMapping("/close/{id}") @GetMapping("/close/{id}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ_EDIT)
public void closeLocalIssue(@PathVariable String id) { public void closeLocalIssue(@PathVariable String id) {
issuesService.closeLocalIssue(id); issuesService.closeLocalIssue(id);
} }
@PostMapping("/delete/relate") @PostMapping("/delete/relate")
@MsRequestLog(module = OperLogModule.TRACK_BUG) @MsRequestLog(module = OperLogModule.TRACK_BUG)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ)
public void deleteRelate(@RequestBody IssuesRequest request) { public void deleteRelate(@RequestBody IssuesRequest request) {
issuesService.deleteIssueRelate(request); issuesService.deleteIssueRelate(request);
} }
@ -153,92 +157,110 @@ public class IssuesController {
} }
@PostMapping("/tapd/user") @PostMapping("/tapd/user")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ)
public List<PlatformUser> getTapdUsers(@RequestBody IssuesRequest request) { public List<PlatformUser> getTapdUsers(@RequestBody IssuesRequest request) {
return issuesService.getTapdProjectUsers(request); return issuesService.getTapdProjectUsers(request);
} }
@GetMapping("/tapd/current_owner/{id}") @GetMapping("/tapd/current_owner/{id}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ)
public List<String> getTapdIssueCurrentOwner(@PathVariable String id) { public List<String> getTapdIssueCurrentOwner(@PathVariable String id) {
return issuesService.getTapdIssueCurrentOwner(id); return issuesService.getTapdIssueCurrentOwner(id);
} }
@GetMapping("/sync/{projectId}") @GetMapping("/sync/{projectId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ)
public void syncThirdPartyIssues(@PathVariable String projectId) { public void syncThirdPartyIssues(@PathVariable String projectId) {
issuesSyncService.syncIssues(projectId); issuesSyncService.syncIssues(projectId);
} }
@PostMapping("/sync/all") @PostMapping("/sync/all")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ_EDIT)
public void syncThirdPartyAllIssues(@RequestBody IssueSyncRequest request) { public void syncThirdPartyAllIssues(@RequestBody IssueSyncRequest request) {
issuesSyncService.syncAllIssues(request); issuesSyncService.syncAllIssues(request);
} }
@GetMapping("/sync/check/{projectId}") @GetMapping("/sync/check/{projectId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ_EDIT)
public IssueSyncCheckResult checkSync(@PathVariable String projectId) { public IssueSyncCheckResult checkSync(@PathVariable String projectId) {
return issuesService.checkSync(projectId); return issuesService.checkSync(projectId);
} }
@PostMapping("/change/status") @PostMapping("/change/status")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ_EDIT)
public void changeStatus(@RequestBody IssuesRequest request) { public void changeStatus(@RequestBody IssuesRequest request) {
issuesService.changeStatus(request); issuesService.changeStatus(request);
} }
@PostMapping("/status/count") @PostMapping("/status/count")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ)
public List<IssuesStatusCountDao> getCountByStatus(@RequestBody IssuesCountRequest request) { public List<IssuesStatusCountDao> getCountByStatus(@RequestBody IssuesCountRequest request) {
return issuesService.getCountByStatus(request); return issuesService.getCountByStatus(request);
} }
@GetMapping("/follow/{issueId}") @GetMapping("/follow/{issueId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ)
public List<String> getFollows(@PathVariable String issueId) { public List<String> getFollows(@PathVariable String issueId) {
return issuesService.getFollows(issueId); return issuesService.getFollows(issueId);
} }
@PostMapping("/up/follows/{issueId}") @PostMapping("/up/follows/{issueId}")
@MsRequestLog(module = OperLogModule.TRACK_BUG) @MsRequestLog(module = OperLogModule.TRACK_BUG)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ_EDIT)
public void saveFollows(@PathVariable String issueId,@RequestBody List<String> follows) { public void saveFollows(@PathVariable String issueId,@RequestBody List<String> follows) {
issuesService.saveFollows(issueId,follows); issuesService.saveFollows(issueId,follows);
} }
@GetMapping("/thirdpart/template/{projectId}") @GetMapping("/thirdpart/template/{projectId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ)
public IssueTemplateDao getThirdPartTemplate(@PathVariable String projectId) { public IssueTemplateDao getThirdPartTemplate(@PathVariable String projectId) {
return issuesService.getThirdPartTemplate(projectId); return issuesService.getThirdPartTemplate(projectId);
} }
@GetMapping("/plugin/custom/fields/{projectId}") @GetMapping("/plugin/custom/fields/{projectId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ)
public List<CustomFieldDao> getPluginCustomFields(@PathVariable String projectId) { public List<CustomFieldDao> getPluginCustomFields(@PathVariable String projectId) {
return issuesService.getPluginCustomFields(projectId); return issuesService.getPluginCustomFields(projectId);
} }
@GetMapping("/demand/list/{projectId}") @GetMapping("/demand/list/{projectId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public List getDemandList(@PathVariable String projectId) { public List getDemandList(@PathVariable String projectId) {
return issuesService.getDemandList(projectId); return issuesService.getDemandList(projectId);
} }
@GetMapping("/third/part/template/enable/{projectId}") @GetMapping("/third/part/template/enable/{projectId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ)
public boolean thirdPartTemplateEnable(@PathVariable String projectId) { public boolean thirdPartTemplateEnable(@PathVariable String projectId) {
return issuesService.thirdPartTemplateEnable(projectId); return issuesService.thirdPartTemplateEnable(projectId);
} }
@PostMapping("/platform/transitions") @PostMapping("/platform/transitions")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ)
public List<PlatformStatusDTO> getPlatformTransitions(@RequestBody PlatformIssueTypeRequest request) { public List<PlatformStatusDTO> getPlatformTransitions(@RequestBody PlatformIssueTypeRequest request) {
return issuesService.getPlatformTransitions(request); return issuesService.getPlatformTransitions(request);
} }
@PostMapping("/platform/status") @PostMapping("/platform/status")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ)
public List<PlatformStatusDTO> getPlatformStatus(@RequestBody PlatformIssueTypeRequest request) { public List<PlatformStatusDTO> getPlatformStatus(@RequestBody PlatformIssueTypeRequest request) {
return issuesService.getPlatformStatus(request); return issuesService.getPlatformStatus(request);
} }
@GetMapping("/platform/option") @GetMapping("/platform/option")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ)
public List<SelectOption> getPlatformOptions() { public List<SelectOption> getPlatformOptions() {
return platformPluginService.getPlatformOptions(); return platformPluginService.getPlatformOptions();
} }
@PostMapping("/platform/form/option") @PostMapping("/platform/form/option")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ)
public List<SelectOption> getPlatformOptions(@RequestBody PlatformOptionRequest request) { public List<SelectOption> getPlatformOptions(@RequestBody PlatformOptionRequest request) {
return platformPluginService.getFormOption(request); return platformPluginService.getFormOption(request);
} }
@PostMapping("/check/third/project") @PostMapping("/check/third/project")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ)
public void checkThirdProjectExist(@RequestBody Project project) { public void checkThirdProjectExist(@RequestBody Project project) {
issuesService.checkThirdProjectExist(project); issuesService.checkThirdProjectExist(project);
} }
@ -251,6 +273,7 @@ public class IssuesController {
@PostMapping("/import") @PostMapping("/import")
@MsAuditLog(module = OperLogModule.TRACK_BUG, type = OperLogConstants.IMPORT, project = "#request.projectId") @MsAuditLog(module = OperLogModule.TRACK_BUG, type = OperLogConstants.IMPORT, project = "#request.projectId")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ_EDIT)
public ExcelResponse issueImport(@RequestPart("request") IssueImportRequest request, @RequestPart("file") MultipartFile file) { public ExcelResponse issueImport(@RequestPart("request") IssueImportRequest request, @RequestPart("file") MultipartFile file) {
baseCheckPermissionService.checkProjectOwner(request.getProjectId()); baseCheckPermissionService.checkProjectOwner(request.getProjectId());
return issuesService.issueImport(request, file); return issuesService.issueImport(request, file);
@ -258,6 +281,7 @@ public class IssuesController {
@PostMapping("/export") @PostMapping("/export")
@MsAuditLog(module = OperLogModule.TRACK_BUG, type = OperLogConstants.EXPORT, project = "#exportRequest.projectId") @MsAuditLog(module = OperLogModule.TRACK_BUG, type = OperLogConstants.EXPORT, project = "#exportRequest.projectId")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_ISSUE_READ)
public void exportIssues(@RequestBody IssueExportRequest exportRequest, HttpServletResponse response) { public void exportIssues(@RequestBody IssueExportRequest exportRequest, HttpServletResponse response) {
issuesService.issueExport(exportRequest, response); issuesService.issueExport(exportRequest, response);
} }

View File

@ -1,7 +1,9 @@
package io.metersphere.controller; package io.metersphere.controller;
import io.metersphere.base.domain.MinderExtraNode; import io.metersphere.base.domain.MinderExtraNode;
import io.metersphere.commons.constants.PermissionConstants;
import io.metersphere.service.MinderExtraNodeService; import io.metersphere.service.MinderExtraNodeService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -18,6 +20,7 @@ public class MinderExtraNodeController {
MinderExtraNodeService minderExtraNodeService; MinderExtraNodeService minderExtraNodeService;
@GetMapping("/list/{groupId}/{parentId}") @GetMapping("/list/{groupId}/{parentId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_MINDER_OPERATE)
public List<MinderExtraNode> list(@PathVariable String groupId, @PathVariable String parentId) { public List<MinderExtraNode> list(@PathVariable String groupId, @PathVariable String parentId) {
return minderExtraNodeService.selectByParentId(parentId, groupId); return minderExtraNodeService.selectByParentId(parentId, groupId);
} }

View File

@ -11,6 +11,7 @@ import io.metersphere.dto.TestCaseCommentDTO;
import io.metersphere.request.testreview.SaveCommentRequest; import io.metersphere.request.testreview.SaveCommentRequest;
import io.metersphere.service.TestCaseCommentService; import io.metersphere.service.TestCaseCommentService;
import io.metersphere.service.TestCaseService; import io.metersphere.service.TestCaseService;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -34,16 +35,22 @@ public class TestCaseCommentController {
} }
@GetMapping("/list/{caseId}/{type}") @GetMapping("/list/{caseId}/{type}")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ,
PermissionConstants.PROJECT_TRACK_REVIEW_READ, PermissionConstants.PROJECT_TRACK_PLAN_READ}, logical = Logical.OR)
public List<TestCaseCommentDTO> getCaseComments(@PathVariable String caseId, @PathVariable String type) { public List<TestCaseCommentDTO> getCaseComments(@PathVariable String caseId, @PathVariable String type) {
return testCaseCommentService.getCaseComments(caseId, type); return testCaseCommentService.getCaseComments(caseId, type);
} }
@GetMapping("/list/{caseId}/{type}/{belongId}") @GetMapping("/list/{caseId}/{type}/{belongId}")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ,
PermissionConstants.PROJECT_TRACK_REVIEW_READ, PermissionConstants.PROJECT_TRACK_PLAN_READ}, logical = Logical.OR)
public List<TestCaseCommentDTO> getCaseComments(@PathVariable String caseId, @PathVariable String type, @PathVariable String belongId) { public List<TestCaseCommentDTO> getCaseComments(@PathVariable String caseId, @PathVariable String type, @PathVariable String belongId) {
return testCaseCommentService.getCaseComments(caseId, type, belongId); return testCaseCommentService.getCaseComments(caseId, type, belongId);
} }
@GetMapping("/list/{caseId}") @GetMapping("/list/{caseId}")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ,
PermissionConstants.PROJECT_TRACK_REVIEW_READ, PermissionConstants.PROJECT_TRACK_PLAN_READ}, logical = Logical.OR)
public List<TestCaseCommentDTO> getCaseComments(@PathVariable String caseId) { public List<TestCaseCommentDTO> getCaseComments(@PathVariable String caseId) {
return testCaseCommentService.getCaseComments(caseId, null); return testCaseCommentService.getCaseComments(caseId, null);
} }

View File

@ -78,7 +78,7 @@ public class TestCaseController {
} }
@GetMapping("/list/{projectId}") @GetMapping("/list/{projectId}")
@RequiresPermissions("PROJECT_TRACK_CASE:READ") @RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public List<TestCaseDTO> list(@PathVariable String projectId) { public List<TestCaseDTO> list(@PathVariable String projectId) {
baseCheckPermissionService.checkProjectOwner(projectId); baseCheckPermissionService.checkProjectOwner(projectId);
QueryTestCaseRequest request = new QueryTestCaseRequest(); QueryTestCaseRequest request = new QueryTestCaseRequest();
@ -87,19 +87,21 @@ public class TestCaseController {
} }
@PostMapping("/list") @PostMapping("/list")
@RequiresPermissions("PROJECT_TRACK_CASE:READ") @RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public List<TestCaseDTO> list(@RequestBody QueryTestCaseRequest request) { public List<TestCaseDTO> list(@RequestBody QueryTestCaseRequest request) {
baseCheckPermissionService.checkProjectOwner(request.getProjectId()); baseCheckPermissionService.checkProjectOwner(request.getProjectId());
return testCaseService.listTestCase(request); return testCaseService.listTestCase(request);
} }
@PostMapping("/list/minder") @PostMapping("/list/minder")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_MINDER_OPERATE)
public List<TestCaseDTO> listForMinder(@RequestBody QueryTestCaseRequest request) { public List<TestCaseDTO> listForMinder(@RequestBody QueryTestCaseRequest request) {
baseCheckPermissionService.checkProjectOwner(request.getProjectId()); baseCheckPermissionService.checkProjectOwner(request.getProjectId());
return testCaseService.listTestCaseForMinder(request); return testCaseService.listTestCaseForMinder(request);
} }
@PostMapping("/list/minder/{goPage}/{pageSize}") @PostMapping("/list/minder/{goPage}/{pageSize}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_MINDER_OPERATE)
public Pager<List<TestCaseDTO>> listForMinder(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestCaseRequest request) { public Pager<List<TestCaseDTO>> listForMinder(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestCaseRequest request) {
baseCheckPermissionService.checkProjectOwner(request.getProjectId()); baseCheckPermissionService.checkProjectOwner(request.getProjectId());
Page<Object> page = PageHelper.startPage(goPage, pageSize, true); Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
@ -107,22 +109,26 @@ public class TestCaseController {
} }
@GetMapping("/relationship/case/{id}/{relationshipType}") @GetMapping("/relationship/case/{id}/{relationshipType}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public List<RelationshipEdgeDTO> getRelationshipCase(@PathVariable("id") String id, @PathVariable("relationshipType") String relationshipType) { public List<RelationshipEdgeDTO> getRelationshipCase(@PathVariable("id") String id, @PathVariable("relationshipType") String relationshipType) {
return testCaseService.getRelationshipCase(id, relationshipType); return testCaseService.getRelationshipCase(id, relationshipType);
} }
@PostMapping("/relationship/add") @PostMapping("/relationship/add")
@MsRequestLog(module = OperLogModule.TRACK_TEST_CASE) @MsRequestLog(module = OperLogModule.TRACK_TEST_CASE)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_CREATE)
public void saveRelationshipBatch(@RequestBody TestCaseRelationshipEdgeRequest request) { public void saveRelationshipBatch(@RequestBody TestCaseRelationshipEdgeRequest request) {
testCaseService.saveRelationshipBatch(request); testCaseService.saveRelationshipBatch(request);
} }
@GetMapping("/relationship/case/count/{id}") @GetMapping("/relationship/case/count/{id}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public int getRelationshipCase(@PathVariable("id") String id) { public int getRelationshipCase(@PathVariable("id") String id) {
return testCaseService.getRelationshipCount(id); return testCaseService.getRelationshipCount(id);
} }
@GetMapping("recent/{count}") @GetMapping("recent/{count}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public List<TestCase> recentTestPlans(@PathVariable int count) { public List<TestCase> recentTestPlans(@PathVariable int count) {
String currentWorkspaceId = SessionUtils.getCurrentWorkspaceId(); String currentWorkspaceId = SessionUtils.getCurrentWorkspaceId();
QueryTestCaseRequest request = new QueryTestCaseRequest(); QueryTestCaseRequest request = new QueryTestCaseRequest();
@ -132,70 +138,83 @@ public class TestCaseController {
} }
@PostMapping("/relate/{goPage}/{pageSize}") @PostMapping("/relate/{goPage}/{pageSize}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public Pager<List<TestCaseDTO>> getTestCaseRelateList(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestCaseRequest request) { public Pager<List<TestCaseDTO>> getTestCaseRelateList(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestCaseRequest request) {
return testCaseService.getTestCaseRelateList(request, goPage, pageSize); return testCaseService.getTestCaseRelateList(request, goPage, pageSize);
} }
@PostMapping("/relationship/relate/{goPage}/{pageSize}") @PostMapping("/relationship/relate/{goPage}/{pageSize}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public Pager<List<TestCaseDTO>> getRelationshipRelateList(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestCaseRequest request) { public Pager<List<TestCaseDTO>> getRelationshipRelateList(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestCaseRequest request) {
return testCaseService.getRelationshipRelateList(request, goPage, pageSize); return testCaseService.getRelationshipRelateList(request, goPage, pageSize);
} }
@PostMapping("/relate/issue/{goPage}/{pageSize}") @PostMapping("/relate/issue/{goPage}/{pageSize}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public Pager<List<TestCaseDTO>> getTestCaseIssueRelateList(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestCaseRequest request) { public Pager<List<TestCaseDTO>> getTestCaseIssueRelateList(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestCaseRequest request) {
Page<Object> page = PageHelper.startPage(goPage, pageSize, true); Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
return PageUtils.setPageInfo(page, testCaseService.getTestCaseIssueRelateList(request)); return PageUtils.setPageInfo(page, testCaseService.getTestCaseIssueRelateList(request));
} }
@GetMapping("/relate/test/list/{caseId}") @GetMapping("/relate/test/list/{caseId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public List<TestCaseTestDao> getRelateTest(@PathVariable String caseId) { public List<TestCaseTestDao> getRelateTest(@PathVariable String caseId) {
return testCaseService.getRelateTest(caseId); return testCaseService.getRelateTest(caseId);
} }
@PostMapping("/relate/test/{type}/{caseId}") @PostMapping("/relate/test/{type}/{caseId}")
@MsRequestLog(module = OperLogModule.TRACK_TEST_CASE) @MsRequestLog(module = OperLogModule.TRACK_TEST_CASE)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT)
public void relateTest(@PathVariable String type, @PathVariable String caseId, @RequestBody List<String> apiIds) { public void relateTest(@PathVariable String type, @PathVariable String caseId, @RequestBody List<String> apiIds) {
testCaseService.relateTest(type, caseId, apiIds); testCaseService.relateTest(type, caseId, apiIds);
} }
@GetMapping("/relate/delete/{caseId}/{testId}") @GetMapping("/relate/delete/{caseId}/{testId}")
@MsRequestLog(module = OperLogModule.TRACK_TEST_CASE) @MsRequestLog(module = OperLogModule.TRACK_TEST_CASE)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT)
public void relateDelete(@PathVariable String caseId, @PathVariable String testId) { public void relateDelete(@PathVariable String caseId, @PathVariable String testId) {
testCaseService.relateDelete(caseId, testId); testCaseService.relateDelete(caseId, testId);
} }
@PostMapping("/reviews/case/{goPage}/{pageSize}") @PostMapping("/reviews/case/{goPage}/{pageSize}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public Pager<List<TestCaseDTO>> getReviewCase(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestCaseRequest request) { public Pager<List<TestCaseDTO>> getReviewCase(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestCaseRequest request) {
Page<Object> page = PageHelper.startPage(goPage, pageSize, true); Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
return PageUtils.setPageInfo(page, testCaseService.getReviewCase(request)); return PageUtils.setPageInfo(page, testCaseService.getReviewCase(request));
} }
@GetMapping("/get/{testCaseId}") @GetMapping("/get/{testCaseId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public TestCaseDTO getTestCase(@PathVariable String testCaseId) { public TestCaseDTO getTestCase(@PathVariable String testCaseId) {
return testCaseService.getTestCase(testCaseId); return testCaseService.getTestCase(testCaseId);
} }
@GetMapping("/get/version/{refId}/{versionId}") @GetMapping("/get/version/{refId}/{versionId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public TestCaseDTO getTestCaseByVersion(@PathVariable String refId, @PathVariable String versionId) { public TestCaseDTO getTestCaseByVersion(@PathVariable String refId, @PathVariable String versionId) {
return testCaseService.getTestCaseByVersion(refId, versionId); return testCaseService.getTestCaseByVersion(refId, versionId);
} }
@GetMapping("/get/step/{testCaseId}") @GetMapping("/get/step/{testCaseId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public TestCaseWithBLOBs getTestCaseStep(@PathVariable String testCaseId) { public TestCaseWithBLOBs getTestCaseStep(@PathVariable String testCaseId) {
return testCaseService.getTestCaseStep(testCaseId); return testCaseService.getTestCaseStep(testCaseId);
} }
@GetMapping("/get/simple/{testCaseId}") @GetMapping("/get/simple/{testCaseId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public TestCaseWithBLOBs getSimpleCase(@PathVariable String testCaseId) { public TestCaseWithBLOBs getSimpleCase(@PathVariable String testCaseId) {
return testCaseService.getSimpleCase(testCaseId); return testCaseService.getSimpleCase(testCaseId);
} }
@GetMapping("/get/edit/simple/{testCaseId}") @GetMapping("/get/edit/simple/{testCaseId}")
// 权限校验在service中
public TestCaseWithBLOBs getSimpleCaseForEdit(@PathVariable String testCaseId) { public TestCaseWithBLOBs getSimpleCaseForEdit(@PathVariable String testCaseId) {
return testCaseService.getSimpleCaseForEdit(testCaseId); return testCaseService.getSimpleCaseForEdit(testCaseId);
} }
@GetMapping("/project/{testCaseId}") @GetMapping("/project/{testCaseId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public Project getProjectByTestCaseId(@PathVariable String testCaseId) { public Project getProjectByTestCaseId(@PathVariable String testCaseId) {
trackCheckPermissionService.checkTestCaseOwner(testCaseId); trackCheckPermissionService.checkTestCaseOwner(testCaseId);
return testCaseService.getProjectByTestCaseId(testCaseId); return testCaseService.getProjectByTestCaseId(testCaseId);
@ -216,6 +235,7 @@ public class TestCaseController {
@PostMapping("/edit/order") @PostMapping("/edit/order")
@MsRequestLog(module = OperLogModule.TRACK_TEST_CASE) @MsRequestLog(module = OperLogModule.TRACK_TEST_CASE)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT)
public void orderCase(@RequestBody ResetOrderRequest request) { public void orderCase(@RequestBody ResetOrderRequest request) {
trackCheckPermissionService.checkTestCaseOwner(request.getMoveId()); trackCheckPermissionService.checkTestCaseOwner(request.getMoveId());
testCaseService.updateOrder(request); testCaseService.updateOrder(request);
@ -225,18 +245,21 @@ public class TestCaseController {
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogDetails(#request.id)", title = "#request.name", content = "#msClass.getLogDetails(#request.id)", msClass = TestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogDetails(#request.id)", title = "#request.name", content = "#msClass.getLogDetails(#request.id)", msClass = TestCaseService.class)
@SendNotice(taskType = NoticeConstants.TaskType.TRACK_TEST_CASE_TASK, target = "#targetClass.getTestCase(#request.id)", targetClass = TestCaseService.class, @SendNotice(taskType = NoticeConstants.TaskType.TRACK_TEST_CASE_TASK, target = "#targetClass.getTestCase(#request.id)", targetClass = TestCaseService.class,
event = NoticeConstants.Event.UPDATE, subject = "测试用例通知") event = NoticeConstants.Event.UPDATE, subject = "测试用例通知")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT)
public TestCase editTestCase(@RequestPart("request") EditTestCaseRequest request) { public TestCase editTestCase(@RequestPart("request") EditTestCaseRequest request) {
return testCaseService.edit(request); return testCaseService.edit(request);
} }
@PostMapping(value = "/edit/testPlan", consumes = {"multipart/form-data"}) @PostMapping(value = "/edit/testPlan", consumes = {"multipart/form-data"})
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogBeforeDetails(#request.id)", title = "#request.name", content = "#msClass.getLogDetails(#request.id)", msClass = TestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogBeforeDetails(#request.id)", title = "#request.name", content = "#msClass.getLogDetails(#request.id)", msClass = TestCaseService.class)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT)
public String editTestCaseByTestPlan(@RequestPart("request") EditTestCaseRequest request, @RequestPart(value = "file", required = false) List<MultipartFile> files) { public String editTestCaseByTestPlan(@RequestPart("request") EditTestCaseRequest request, @RequestPart(value = "file", required = false) List<MultipartFile> files) {
return testCaseService.editTestCase(request, files); return testCaseService.editTestCase(request, files);
} }
@PostMapping("/delete/{testCaseId}") @PostMapping("/delete/{testCaseId}")
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.DELETE, beforeEvent = "#msClass.getLogDetails(#testCaseId)", msClass = TestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.DELETE, beforeEvent = "#msClass.getLogDetails(#testCaseId)", msClass = TestCaseService.class)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_DELETE)
public int deleteTestCase(@PathVariable String testCaseId) { public int deleteTestCase(@PathVariable String testCaseId) {
trackCheckPermissionService.checkTestCaseOwner(testCaseId); trackCheckPermissionService.checkTestCaseOwner(testCaseId);
return testCaseService.deleteTestCaseBySameVersion(testCaseId); return testCaseService.deleteTestCaseBySameVersion(testCaseId);
@ -246,6 +269,7 @@ public class TestCaseController {
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.GC, beforeEvent = "#msClass.getLogDetails(#testCaseId)", msClass = TestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.GC, beforeEvent = "#msClass.getLogDetails(#testCaseId)", msClass = TestCaseService.class)
@SendNotice(taskType = NoticeConstants.TaskType.TRACK_TEST_CASE_TASK, event = NoticeConstants.Event.DELETE, target = "#targetClass.getTestCase(#testCaseId)", targetClass = TestCaseService.class, @SendNotice(taskType = NoticeConstants.TaskType.TRACK_TEST_CASE_TASK, event = NoticeConstants.Event.DELETE, target = "#targetClass.getTestCase(#testCaseId)", targetClass = TestCaseService.class,
subject = "测试用例通知") subject = "测试用例通知")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_DELETE)
public int deleteToGC(@PathVariable String testCaseId) { public int deleteToGC(@PathVariable String testCaseId) {
trackCheckPermissionService.checkTestCaseOwner(testCaseId); trackCheckPermissionService.checkTestCaseOwner(testCaseId);
return testCaseService.deleteTestCaseToGc(testCaseId); return testCaseService.deleteTestCaseToGc(testCaseId);
@ -255,6 +279,7 @@ public class TestCaseController {
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.GC, beforeEvent = "#msClass.getLogDetails(#testCaseId)", msClass = TestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.GC, beforeEvent = "#msClass.getLogDetails(#testCaseId)", msClass = TestCaseService.class)
@SendNotice(taskType = NoticeConstants.TaskType.TRACK_TEST_CASE_TASK, event = NoticeConstants.Event.DELETE, target = "#targetClass.getTestCase(#testCaseId)", targetClass = TestCaseService.class, @SendNotice(taskType = NoticeConstants.TaskType.TRACK_TEST_CASE_TASK, event = NoticeConstants.Event.DELETE, target = "#targetClass.getTestCase(#testCaseId)", targetClass = TestCaseService.class,
subject = "测试用例通知") subject = "测试用例通知")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_BATCH_ADD_PUBLIC)
public void deletePublic(@PathVariable String versionId, @PathVariable String refId) { public void deletePublic(@PathVariable String versionId, @PathVariable String refId) {
testCaseService.deleteTestCasePublic(versionId, refId); testCaseService.deleteTestCasePublic(versionId, refId);
} }
@ -262,6 +287,7 @@ public class TestCaseController {
@PostMapping("/import") @PostMapping("/import")
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.IMPORT, project = "#request.projectId") @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.IMPORT, project = "#request.projectId")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_IMPORT)
public ExcelResponse testCaseImport(@RequestPart("request") TestCaseImportRequest request, @RequestPart("file") MultipartFile file, HttpServletRequest httpRequest) { public ExcelResponse testCaseImport(@RequestPart("request") TestCaseImportRequest request, @RequestPart("file") MultipartFile file, HttpServletRequest httpRequest) {
baseCheckPermissionService.checkProjectOwner(request.getProjectId()); baseCheckPermissionService.checkProjectOwner(request.getProjectId());
return testCaseService.testCaseImport(file, request, httpRequest); return testCaseService.testCaseImport(file, request, httpRequest);
@ -299,7 +325,7 @@ public class TestCaseController {
} }
@PostMapping("/batch/edit") @PostMapping("/batch/edit")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT) @RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_BATCH_EDIT)
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.BATCH_UPDATE, beforeEvent = "#msClass.getLogDetails(#request.ids)", content = "#msClass.getLogDetails(#request.ids)", msClass = TestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.BATCH_UPDATE, beforeEvent = "#msClass.getLogDetails(#request.ids)", content = "#msClass.getLogDetails(#request.ids)", msClass = TestCaseService.class)
@SendNotice(taskType = NoticeConstants.TaskType.TRACK_TEST_CASE_TASK, target = "#targetClass.findByBatchRequest(#request)", targetClass = TestCaseService.class, @SendNotice(taskType = NoticeConstants.TaskType.TRACK_TEST_CASE_TASK, target = "#targetClass.findByBatchRequest(#request)", targetClass = TestCaseService.class,
event = NoticeConstants.Event.UPDATE, subject = "测试用例通知") event = NoticeConstants.Event.UPDATE, subject = "测试用例通知")
@ -309,19 +335,20 @@ public class TestCaseController {
@PostMapping("/batch/relate/demand") @PostMapping("/batch/relate/demand")
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.BATCH_UPDATE, beforeEvent = "#msClass.getLogDetails(#request.ids)", content = "#msClass.getLogDetails(#request.ids)", msClass = TestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.BATCH_UPDATE, beforeEvent = "#msClass.getLogDetails(#request.ids)", content = "#msClass.getLogDetails(#request.ids)", msClass = TestCaseService.class)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_BATCH_EDIT)
public void batchRelateDemand(@RequestBody TestCaseBatchRequest request) { public void batchRelateDemand(@RequestBody TestCaseBatchRequest request) {
testCaseService.batchRelateDemand(request); testCaseService.batchRelateDemand(request);
} }
@PostMapping("/batch/copy") @PostMapping("/batch/copy")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_COPY)
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.BATCH_ADD, beforeEvent = "#msClass.getLogDetails(#request.ids)", content = "#msClass.getLogDetails(#request.ids)", msClass = TestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.BATCH_ADD, beforeEvent = "#msClass.getLogDetails(#request.ids)", content = "#msClass.getLogDetails(#request.ids)", msClass = TestCaseService.class)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_BATCH_COPY)
public void copyTestCaseBath(@RequestBody TestCaseBatchRequest request) { public void copyTestCaseBath(@RequestBody TestCaseBatchRequest request) {
testCaseService.copyTestCaseBath(request); testCaseService.copyTestCaseBath(request);
} }
@PostMapping("/batch/copy/public") @PostMapping("/batch/copy/public")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT) @RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_BATCH_COPY)
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.BATCH_ADD, beforeEvent = "#msClass.getLogDetails(#request.ids)", content = "#msClass.getLogDetails(#request.ids)", msClass = TestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.BATCH_ADD, beforeEvent = "#msClass.getLogDetails(#request.ids)", content = "#msClass.getLogDetails(#request.ids)", msClass = TestCaseService.class)
@SendNotice(taskType = NoticeConstants.TaskType.TRACK_TEST_CASE_TASK, target = "#targetClass.findByBatchRequest(#request)", targetClass = TestCaseService.class, @SendNotice(taskType = NoticeConstants.TaskType.TRACK_TEST_CASE_TASK, target = "#targetClass.findByBatchRequest(#request)", targetClass = TestCaseService.class,
event = NoticeConstants.Event.CREATE, subject = "测试用例通知") event = NoticeConstants.Event.CREATE, subject = "测试用例通知")
@ -331,7 +358,7 @@ public class TestCaseController {
@PostMapping("/batch/delete") @PostMapping("/batch/delete")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_DELETE) @RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_BATCH_DELETE)
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.BATCH_DEL, beforeEvent = "#msClass.getLogDetails(#request.ids)", msClass = TestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.BATCH_DEL, beforeEvent = "#msClass.getLogDetails(#request.ids)", msClass = TestCaseService.class)
public void deleteTestCaseBath(@RequestBody TestCaseBatchRequest request) { public void deleteTestCaseBath(@RequestBody TestCaseBatchRequest request) {
testCaseService.deleteTestCaseBath(request); testCaseService.deleteTestCaseBath(request);
@ -350,18 +377,21 @@ public class TestCaseController {
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.BATCH_DEL, beforeEvent = "#msClass.getLogDetails(#request.ids)", msClass = TestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.BATCH_DEL, beforeEvent = "#msClass.getLogDetails(#request.ids)", msClass = TestCaseService.class)
@SendNotice(taskType = NoticeConstants.TaskType.TRACK_TEST_CASE_TASK, target = "#targetClass.findByBatchRequest(#request)", targetClass = TestCaseService.class, @SendNotice(taskType = NoticeConstants.TaskType.TRACK_TEST_CASE_TASK, target = "#targetClass.findByBatchRequest(#request)", targetClass = TestCaseService.class,
event = NoticeConstants.Event.DELETE, subject = "测试用例通知") event = NoticeConstants.Event.DELETE, subject = "测试用例通知")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_DELETE)
public void deleteToGcBatchPublic(@RequestBody TestCaseBatchRequest request) { public void deleteToGcBatchPublic(@RequestBody TestCaseBatchRequest request) {
testCaseService.deleteToGcBatchPublic(request); testCaseService.deleteToGcBatchPublic(request);
} }
@PostMapping("/reduction") @PostMapping("/reduction")
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.RESTORE, beforeEvent = "#msClass.getLogDetails(#request.ids)", msClass = TestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.RESTORE, beforeEvent = "#msClass.getLogDetails(#request.ids)", msClass = TestCaseService.class)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_DELETE)
public void reduction(@RequestBody TestCaseBatchRequest request) { public void reduction(@RequestBody TestCaseBatchRequest request) {
testCaseService.reduction(request); testCaseService.reduction(request);
} }
@PostMapping("/file/download") @PostMapping("/file/download")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public ResponseEntity<byte[]> download(@RequestBody FileOperationRequest fileOperationRequest) { public ResponseEntity<byte[]> download(@RequestBody FileOperationRequest fileOperationRequest) {
byte[] bytes = fileService.loadFileAsBytes(fileOperationRequest.getId()); byte[] bytes = fileService.loadFileAsBytes(fileOperationRequest.getId());
return ResponseEntity.ok() return ResponseEntity.ok()
@ -371,6 +401,7 @@ public class TestCaseController {
} }
@GetMapping("/file/preview/{fileId}") @GetMapping("/file/preview/{fileId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public ResponseEntity<byte[]> preview(@PathVariable String fileId) { public ResponseEntity<byte[]> preview(@PathVariable String fileId) {
byte[] bytes = fileService.loadFileAsBytes(fileId); byte[] bytes = fileService.loadFileAsBytes(fileId);
return ResponseEntity.ok() return ResponseEntity.ok()
@ -381,19 +412,21 @@ public class TestCaseController {
@PostMapping("/save") @PostMapping("/save")
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.CREATE, title = "#testCaseWithBLOBs.name", content = "#msClass.getLogDetails(#testCaseWithBLOBs.id)", msClass = TestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.CREATE, title = "#testCaseWithBLOBs.name", content = "#msClass.getLogDetails(#testCaseWithBLOBs.id)", msClass = TestCaseService.class)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_CREATE)
public TestCaseWithBLOBs saveTestCase(@RequestBody EditTestCaseRequest request) { public TestCaseWithBLOBs saveTestCase(@RequestBody EditTestCaseRequest request) {
request.setId(UUID.randomUUID().toString()); request.setId(UUID.randomUUID().toString());
return testCaseService.addTestCase(request); return testCaseService.addTestCase(request);
} }
@PostMapping("/minder/edit") @PostMapping("/minder/edit")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT) @RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_MINDER_OPERATE)
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.MINDER_OPERATION, project = "#request.projectId", beforeEvent = "#msClass.getCaseLogDetails(#request)", content = "#msClass.getCaseLogDetails(#request)", msClass = TestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.MINDER_OPERATION, project = "#request.projectId", beforeEvent = "#msClass.getCaseLogDetails(#request)", content = "#msClass.getCaseLogDetails(#request)", msClass = TestCaseService.class)
public void minderEdit(@RequestBody TestCaseMinderEditRequest request) { public void minderEdit(@RequestBody TestCaseMinderEditRequest request) {
testCaseService.minderEdit(request); testCaseService.minderEdit(request);
} }
@GetMapping("/follow/{caseId}") @GetMapping("/follow/{caseId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public List<String> getFollows(@PathVariable String caseId) { public List<String> getFollows(@PathVariable String caseId) {
return testCaseService.getFollows(caseId); return testCaseService.getFollows(caseId);
} }
@ -406,17 +439,20 @@ public class TestCaseController {
} }
@GetMapping("versions/{caseId}") @GetMapping("versions/{caseId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public List<TestCaseDTO> getTestCaseVersions(@PathVariable String caseId) { public List<TestCaseDTO> getTestCaseVersions(@PathVariable String caseId) {
return testCaseService.getTestCaseVersions(caseId); return testCaseService.getTestCaseVersions(caseId);
} }
@GetMapping("get/{version}/{refId}") @GetMapping("get/{version}/{refId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public TestCaseDTO getTestCase(@PathVariable String version, @PathVariable String refId) { public TestCaseDTO getTestCase(@PathVariable String version, @PathVariable String refId) {
return testCaseService.getTestCaseByVersion(refId, version); return testCaseService.getTestCaseByVersion(refId, version);
} }
@GetMapping("delete/{version}/{refId}") @GetMapping("delete/{version}/{refId}")
public void deleteApiDefinition(@PathVariable String version, @PathVariable String refId) { @RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_DELETE)
public void deleteTestCaseByVersion(@PathVariable String version, @PathVariable String refId) {
testCaseService.deleteTestCaseByVersion(refId, version); testCaseService.deleteTestCaseByVersion(refId, version);
} }
@ -427,11 +463,13 @@ public class TestCaseController {
* @return * @return
*/ */
@GetMapping("hasOtherInfo/{caseId}") @GetMapping("hasOtherInfo/{caseId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public Boolean hasOtherInfo(@PathVariable String caseId) { public Boolean hasOtherInfo(@PathVariable String caseId) {
return testCaseService.hasOtherInfo(caseId); return testCaseService.hasOtherInfo(caseId);
} }
@GetMapping("/update/custom/num/{projectId}") @GetMapping("/update/custom/num/{projectId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT)
public void updateCustomNum(@PathVariable String projectId) { public void updateCustomNum(@PathVariable String projectId) {
testCaseService.updateTestCaseCustomNumByProjectId(projectId); testCaseService.updateTestCaseCustomNumByProjectId(projectId);
} }
@ -442,6 +480,7 @@ public class TestCaseController {
* 项目报告服务需要统计测试用例 * 项目报告服务需要统计测试用例
*/ */
@PostMapping("/count") @PostMapping("/count")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public List<TestCaseCountChartResult> countTestCaseByRequest(@RequestBody TestCaseCountRequest request) { public List<TestCaseCountChartResult> countTestCaseByRequest(@RequestBody TestCaseCountRequest request) {
return testCaseService.countTestCaseByRequest(request); return testCaseService.countTestCaseByRequest(request);
} }
@ -452,11 +491,13 @@ public class TestCaseController {
* 项目报告服务通过不同类型需要统计测试用例 * 项目报告服务通过不同类型需要统计测试用例
*/ */
@PostMapping("/count/{type}") @PostMapping("/count/{type}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public List<TestAnalysisChartResult> countTestCaseByRequest(@PathVariable String type, @RequestBody TestAnalysisChartRequest request) { public List<TestAnalysisChartResult> countTestCaseByRequest(@PathVariable String type, @RequestBody TestAnalysisChartRequest request) {
return testCaseService.countTestCaseByTypeAndRequest(type, request); return testCaseService.countTestCaseByTypeAndRequest(type, request);
} }
@PostMapping("/select/by/id") @PostMapping("/select/by/id")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_CASE_READ)
public List<TestCase> selectByIds(@RequestBody QueryTestCaseRequest request) { public List<TestCase> selectByIds(@RequestBody QueryTestCaseRequest request) {
return testCaseService.selectByIds(request); return testCaseService.selectByIds(request);
} }

View File

@ -2,10 +2,13 @@ package io.metersphere.controller;
import io.metersphere.commons.constants.OperLogConstants; import io.metersphere.commons.constants.OperLogConstants;
import io.metersphere.commons.constants.OperLogModule; import io.metersphere.commons.constants.OperLogModule;
import io.metersphere.commons.constants.PermissionConstants;
import io.metersphere.dto.TestCaseDTO; import io.metersphere.dto.TestCaseDTO;
import io.metersphere.log.annotation.MsAuditLog; import io.metersphere.log.annotation.MsAuditLog;
import io.metersphere.request.issues.IssuesRelevanceRequest; import io.metersphere.request.issues.IssuesRelevanceRequest;
import io.metersphere.service.TestCaseIssueService; import io.metersphere.service.TestCaseIssueService;
import org.apache.shiro.authz.annotation.Logical;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -22,11 +25,13 @@ public class TestCaseIssuesController {
private TestCaseIssueService testCaseIssueService; private TestCaseIssueService testCaseIssueService;
@PostMapping("/list") @PostMapping("/list")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ, PermissionConstants.PROJECT_TRACK_ISSUE_READ}, logical = Logical.OR)
public List<TestCaseDTO> list(@RequestBody IssuesRelevanceRequest request) { public List<TestCaseDTO> list(@RequestBody IssuesRelevanceRequest request) {
return testCaseIssueService.list(request); return testCaseIssueService.list(request);
} }
@PostMapping("/relate") @PostMapping("/relate")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT, PermissionConstants.PROJECT_TRACK_ISSUE_READ_EDIT}, logical = Logical.AND)
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.ASSOCIATE_ISSUE, content = "#msClass.getLogDetails(#request)", msClass = TestCaseIssueService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.ASSOCIATE_ISSUE, content = "#msClass.getLogDetails(#request)", msClass = TestCaseIssueService.class)
public void relate(@RequestBody IssuesRelevanceRequest request) { public void relate(@RequestBody IssuesRelevanceRequest request) {
testCaseIssueService.relate(request); testCaseIssueService.relate(request);

View File

@ -3,6 +3,7 @@ package io.metersphere.controller;
import io.metersphere.base.domain.TestCaseNode; import io.metersphere.base.domain.TestCaseNode;
import io.metersphere.commons.constants.OperLogConstants; import io.metersphere.commons.constants.OperLogConstants;
import io.metersphere.commons.constants.OperLogModule; import io.metersphere.commons.constants.OperLogModule;
import io.metersphere.commons.constants.PermissionConstants;
import io.metersphere.log.annotation.MsAuditLog; import io.metersphere.log.annotation.MsAuditLog;
import io.metersphere.log.annotation.MsRequestLog; import io.metersphere.log.annotation.MsRequestLog;
import io.metersphere.request.testcase.DragNodeRequest; import io.metersphere.request.testcase.DragNodeRequest;
@ -14,6 +15,7 @@ import io.metersphere.dto.TestCaseNodeDTO;
import io.metersphere.service.BaseCheckPermissionService; import io.metersphere.service.BaseCheckPermissionService;
import io.metersphere.service.TestCaseNodeService; import io.metersphere.service.TestCaseNodeService;
import io.metersphere.service.wapper.CheckPermissionService; import io.metersphere.service.wapper.CheckPermissionService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -33,12 +35,14 @@ public class TestCaseNodeController {
private BaseCheckPermissionService baseCheckPermissionService; private BaseCheckPermissionService baseCheckPermissionService;
@GetMapping("/list/{projectId}") @GetMapping("/list/{projectId}")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ})
public List<TestCaseNodeDTO> getNodeByProjectId(@PathVariable String projectId) { public List<TestCaseNodeDTO> getNodeByProjectId(@PathVariable String projectId) {
baseCheckPermissionService.checkProjectOwner(projectId); baseCheckPermissionService.checkProjectOwner(projectId);
return testCaseNodeService.getNodeTreeByProjectId(projectId); return testCaseNodeService.getNodeTreeByProjectId(projectId);
} }
@PostMapping("/list/{projectId}") @PostMapping("/list/{projectId}")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ})
public List<TestCaseNodeDTO> getNodeByCondition(@PathVariable String projectId, @RequestBody(required = false) QueryTestCaseRequest request) { public List<TestCaseNodeDTO> getNodeByCondition(@PathVariable String projectId, @RequestBody(required = false) QueryTestCaseRequest request) {
// 高级搜索所属模块搜索时, 切换项目时需替换projectId为参数中切换项目 // 高级搜索所属模块搜索时, 切换项目时需替换projectId为参数中切换项目
if (request != null && request.getProjectId() != null) { if (request != null && request.getProjectId() != null) {
@ -50,6 +54,7 @@ public class TestCaseNodeController {
} }
@PostMapping("/count/{projectId}") @PostMapping("/count/{projectId}")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ})
public Map<String, Integer> getNodeCountMapByProjectId(@PathVariable String projectId, @RequestBody(required = false) QueryTestCaseRequest request) { public Map<String, Integer> getNodeCountMapByProjectId(@PathVariable String projectId, @RequestBody(required = false) QueryTestCaseRequest request) {
baseCheckPermissionService.checkProjectOwner(projectId); baseCheckPermissionService.checkProjectOwner(projectId);
return testCaseNodeService.getNodeCountMapByProjectId(projectId, return testCaseNodeService.getNodeCountMapByProjectId(projectId,
@ -57,62 +62,73 @@ public class TestCaseNodeController {
} }
@PostMapping("/minder/extraNode/count") @PostMapping("/minder/extraNode/count")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ})
public Map<String, Integer> getMinderTreeExtraNodeCount(@RequestBody List<String> nodeIds) { public Map<String, Integer> getMinderTreeExtraNodeCount(@RequestBody List<String> nodeIds) {
return testCaseNodeService.getMinderTreeExtraNodeCount(nodeIds); return testCaseNodeService.getMinderTreeExtraNodeCount(nodeIds);
} }
@GetMapping("/trashCount/{projectId}") @GetMapping("/trashCount/{projectId}")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ})
public long trashCount(@PathVariable String projectId) { public long trashCount(@PathVariable String projectId) {
baseCheckPermissionService.checkProjectOwner(projectId); baseCheckPermissionService.checkProjectOwner(projectId);
return testCaseNodeService.trashCount(projectId); return testCaseNodeService.trashCount(projectId);
} }
@GetMapping("/publicCount/{workSpaceId}") @GetMapping("/publicCount/{workSpaceId}")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ})
public long publicCount(@PathVariable String workSpaceId) { public long publicCount(@PathVariable String workSpaceId) {
return testCaseNodeService.publicCount(workSpaceId); return testCaseNodeService.publicCount(workSpaceId);
} }
/*模块列表列表*/ /*模块列表列表*/
@PostMapping("/list/project") @PostMapping("/list/project")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ})
public List<TestCaseNodeDTO> getAllNodeByProjectId(@RequestBody QueryNodeRequest request) { public List<TestCaseNodeDTO> getAllNodeByProjectId(@RequestBody QueryNodeRequest request) {
return testCaseNodeService.getAllNodeByProjectId(request); return testCaseNodeService.getAllNodeByProjectId(request);
} }
@GetMapping("/list/plan/{planId}") @GetMapping("/list/plan/{planId}")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ})
public List<TestCaseNodeDTO> getNodeByPlanId(@PathVariable String planId) { public List<TestCaseNodeDTO> getNodeByPlanId(@PathVariable String planId) {
trackCheckPermissionService.checkTestPlanOwner(planId); trackCheckPermissionService.checkTestPlanOwner(planId);
return testCaseNodeService.getNodeByPlanId(planId); return testCaseNodeService.getNodeByPlanId(planId);
} }
@PostMapping("/list/plan/{planId}") @PostMapping("/list/plan/{planId}")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ})
public List<TestCaseNodeDTO> getNodeByPlanId(@PathVariable String planId, @RequestBody(required = false) QueryTestPlanCaseRequest request) { public List<TestCaseNodeDTO> getNodeByPlanId(@PathVariable String planId, @RequestBody(required = false) QueryTestPlanCaseRequest request) {
trackCheckPermissionService.checkTestPlanOwner(planId); trackCheckPermissionService.checkTestPlanOwner(planId);
return testCaseNodeService.getNodeByPlanId(planId, Optional.ofNullable(request).orElse(new QueryTestPlanCaseRequest())); return testCaseNodeService.getNodeByPlanId(planId, Optional.ofNullable(request).orElse(new QueryTestPlanCaseRequest()));
} }
@PostMapping("/list/public/{workspaceId}") @PostMapping("/list/public/{workspaceId}")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ})
public List<TestCaseNodeDTO> getPublicCaseNode(@PathVariable String workspaceId, @RequestBody QueryTestCaseRequest request) { public List<TestCaseNodeDTO> getPublicCaseNode(@PathVariable String workspaceId, @RequestBody QueryTestCaseRequest request) {
return testCaseNodeService.getPublicCaseNode(workspaceId, request); return testCaseNodeService.getPublicCaseNode(workspaceId, request);
} }
@PostMapping("/list/trash/{projectId}") @PostMapping("/list/trash/{projectId}")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ})
public List<TestCaseNodeDTO> getTrashCaseNode(@PathVariable String projectId, @RequestBody QueryTestCaseRequest request) { public List<TestCaseNodeDTO> getTrashCaseNode(@PathVariable String projectId, @RequestBody QueryTestCaseRequest request) {
return testCaseNodeService.getTrashCaseNode(projectId, request); return testCaseNodeService.getTrashCaseNode(projectId, request);
} }
@PostMapping("/list/plan/relate") @PostMapping("/list/plan/relate")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_PLAN_READ})
public List<TestCaseNodeDTO> getRelatePlanNodes(@RequestBody QueryTestCaseRequest request) { public List<TestCaseNodeDTO> getRelatePlanNodes(@RequestBody QueryTestCaseRequest request) {
trackCheckPermissionService.checkTestPlanOwner(request.getPlanId()); trackCheckPermissionService.checkTestPlanOwner(request.getPlanId());
return testCaseNodeService.getRelatePlanNodes(request); return testCaseNodeService.getRelatePlanNodes(request);
} }
@PostMapping("/list/review/relate") @PostMapping("/list/review/relate")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_REVIEW_READ})
public List<TestCaseNodeDTO> getRelateReviewNodes(@RequestBody QueryTestCaseRequest request) { public List<TestCaseNodeDTO> getRelateReviewNodes(@RequestBody QueryTestCaseRequest request) {
trackCheckPermissionService.checkTestReviewOwner(request.getReviewId()); trackCheckPermissionService.checkTestReviewOwner(request.getReviewId());
return testCaseNodeService.getRelateReviewNodes(request); return testCaseNodeService.getRelateReviewNodes(request);
} }
@GetMapping("/list/plan/{planId}/{runResult}") @GetMapping("/list/plan/{planId}/{runResult}")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_PLAN_READ})
public List<TestCaseNodeDTO> getNodeByPlanIdAndRunResult(@PathVariable String planId, @PathVariable String runResult) { public List<TestCaseNodeDTO> getNodeByPlanIdAndRunResult(@PathVariable String planId, @PathVariable String runResult) {
trackCheckPermissionService.checkTestPlanOwner(planId); trackCheckPermissionService.checkTestPlanOwner(planId);
QueryTestPlanCaseRequest request = new QueryTestPlanCaseRequest(); QueryTestPlanCaseRequest request = new QueryTestPlanCaseRequest();
@ -122,30 +138,35 @@ public class TestCaseNodeController {
} }
@GetMapping("/list/review/{reviewId}") @GetMapping("/list/review/{reviewId}")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_REVIEW_READ})
public List<TestCaseNodeDTO> getNodeByReviewId(@PathVariable String reviewId) { public List<TestCaseNodeDTO> getNodeByReviewId(@PathVariable String reviewId) {
trackCheckPermissionService.checkTestReviewOwner(reviewId); trackCheckPermissionService.checkTestReviewOwner(reviewId);
return testCaseNodeService.getNodeByReviewId(reviewId); return testCaseNodeService.getNodeByReviewId(reviewId);
} }
@PostMapping("/list/review/{reviewId}") @PostMapping("/list/review/{reviewId}")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_REVIEW_READ})
public List<TestCaseNodeDTO> getNodeByReviewId(@PathVariable String reviewId, @RequestBody(required = false) QueryCaseReviewRequest request) { public List<TestCaseNodeDTO> getNodeByReviewId(@PathVariable String reviewId, @RequestBody(required = false) QueryCaseReviewRequest request) {
trackCheckPermissionService.checkTestReviewOwner(reviewId); trackCheckPermissionService.checkTestReviewOwner(reviewId);
return testCaseNodeService.getNodeByReviewId(reviewId, Optional.ofNullable(request).orElse(new QueryCaseReviewRequest())); return testCaseNodeService.getNodeByReviewId(reviewId, Optional.ofNullable(request).orElse(new QueryCaseReviewRequest()));
} }
@PostMapping("/add") @PostMapping("/add")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT})
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.CREATE, title = "#node.name", content = "#msClass.getLogDetails(#node)", msClass = TestCaseNodeService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.CREATE, title = "#node.name", content = "#msClass.getLogDetails(#node)", msClass = TestCaseNodeService.class)
public String addNode(@RequestBody TestCaseNode node) { public String addNode(@RequestBody TestCaseNode node) {
return testCaseNodeService.addNode(node); return testCaseNodeService.addNode(node);
} }
@PostMapping("/edit") @PostMapping("/edit")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT})
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogDetails(#node)", title = "#node.name", content = "#msClass.getLogDetails(#node)", msClass = TestCaseNodeService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogDetails(#node)", title = "#node.name", content = "#msClass.getLogDetails(#node)", msClass = TestCaseNodeService.class)
public int editNode(@RequestBody DragNodeRequest node) { public int editNode(@RequestBody DragNodeRequest node) {
return testCaseNodeService.editNode(node); return testCaseNodeService.editNode(node);
} }
@PostMapping("/delete") @PostMapping("/delete")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT})
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.DELETE, beforeEvent = "#msClass.getLogDetails(#nodeIds)", msClass = TestCaseNodeService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.DELETE, beforeEvent = "#msClass.getLogDetails(#nodeIds)", msClass = TestCaseNodeService.class)
public int deleteNode(@RequestBody List<String> nodeIds) { public int deleteNode(@RequestBody List<String> nodeIds) {
//nodeIds 包含删除节点ID及其所有子节点ID //nodeIds 包含删除节点ID及其所有子节点ID
@ -153,6 +174,7 @@ public class TestCaseNodeController {
} }
@PostMapping("/drag") @PostMapping("/drag")
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT})
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogDetails(#node)", title = "#node.name", content = "#msClass.getLogDetails(#node)", msClass = TestCaseNodeService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogDetails(#node)", title = "#node.name", content = "#msClass.getLogDetails(#node)", msClass = TestCaseNodeService.class)
public void dragNode(@RequestBody DragNodeRequest node) { public void dragNode(@RequestBody DragNodeRequest node) {
testCaseNodeService.dragNode(node); testCaseNodeService.dragNode(node);
@ -160,6 +182,7 @@ public class TestCaseNodeController {
@PostMapping("/pos") @PostMapping("/pos")
@MsRequestLog(module = OperLogModule.TRACK_TEST_CASE) @MsRequestLog(module = OperLogModule.TRACK_TEST_CASE)
@RequiresPermissions(value = {PermissionConstants.PROJECT_TRACK_CASE_READ_EDIT})
public void treeSort(@RequestBody List<String> ids) { public void treeSort(@RequestBody List<String> ids) {
testCaseNodeService.sort(ids); testCaseNodeService.sort(ids);
} }

View File

@ -1,51 +0,0 @@
package io.metersphere.controller;
import io.metersphere.base.domain.TestCaseReport;
import io.metersphere.commons.constants.OperLogConstants;
import io.metersphere.commons.constants.OperLogModule;
import io.metersphere.log.annotation.MsAuditLog;
import io.metersphere.request.testCaseReport.CreateReportRequest;
import io.metersphere.service.TestCaseReportService;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import java.util.List;
import java.util.UUID;
@RequestMapping("/case/report")
@RestController
public class TestCaseReportController {
@Resource
TestCaseReportService testCaseReportService;
@PostMapping("/list")
public List<TestCaseReport> list(@RequestBody TestCaseReport request) {
return testCaseReportService.listTestCaseReport(request);
}
@GetMapping("/get/{id}")
public TestCaseReport get(@PathVariable String id) {
return testCaseReportService.getTestCaseReport(id);
}
@PostMapping("/add")
@MsAuditLog(module = OperLogModule.TRACK_TEST_PLAN, type = OperLogConstants.CREATE, content = "#msClass.getLogDetails(#request.id)", msClass = TestCaseReportService.class)
public String addByTemplateId(@RequestBody CreateReportRequest request) {
request.setId(UUID.randomUUID().toString());
return testCaseReportService.addTestCaseReportByTemplateId(request);
}
@PostMapping("/edit")
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE_REVIEW, type = OperLogConstants.UPDATE, beforeEvent = "#msClass.getLogDetails(#TestCaseReport.id)", content = "#msClass.getLogDetails(#TestCaseReport.id)", msClass = TestCaseReportService.class)
public void edit(@RequestBody TestCaseReport TestCaseReport) {
testCaseReportService.editTestCaseReport(TestCaseReport);
}
@PostMapping("/delete/{id}")
@MsAuditLog(module = OperLogModule.TRACK_TEST_PLAN, type = OperLogConstants.DELETE, beforeEvent = "#msClass.getLogDetails(#id)", msClass = TestCaseReportService.class)
public int delete(@PathVariable String id) {
return testCaseReportService.deleteTestCaseReport(id);
}
}

View File

@ -1,49 +0,0 @@
package io.metersphere.controller;
import io.metersphere.base.domain.TestCaseReportTemplate;
import io.metersphere.commons.constants.OperLogConstants;
import io.metersphere.commons.constants.OperLogModule;
import io.metersphere.log.annotation.MsAuditLog;
import io.metersphere.request.testCaseReport.QueryTemplateRequest;
import io.metersphere.service.TestCaseReportTemplateService;
import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import java.util.List;
@RequestMapping("/case/report/template")
@RestController
public class TestCaseReportTemplateController {
@Resource
TestCaseReportTemplateService testCaseReportTemplateService;
@PostMapping("/list")
public List<TestCaseReportTemplate> list(@RequestBody QueryTemplateRequest request) {
return testCaseReportTemplateService.listTestCaseReportTemplate(request);
}
@GetMapping("/get/{id}")
public TestCaseReportTemplate get(@PathVariable String id) {
return testCaseReportTemplateService.getTestCaseReportTemplate(id);
}
@PostMapping("/add")
@MsAuditLog(module = OperLogModule.WORKSPACE_TEMPLATE_SETTINGS, type = OperLogConstants.CREATE, title = "#testCaseReportTemplate.name",sourceId = "#testCaseReportTemplate.id")
public void add(@RequestBody TestCaseReportTemplate testCaseReportTemplate) {
testCaseReportTemplateService.addTestCaseReportTemplate(testCaseReportTemplate);
}
@PostMapping("/edit")
@MsAuditLog(module = OperLogModule.WORKSPACE_TEMPLATE_SETTINGS, type = OperLogConstants.UPDATE, title = "#testCaseReportTemplate.name",sourceId = "#testCaseReportTemplate.id")
public void edit(@RequestBody TestCaseReportTemplate testCaseReportTemplate) {
testCaseReportTemplateService.editTestCaseReportTemplate(testCaseReportTemplate);
}
@PostMapping("/delete/{id}")
@MsAuditLog(module = OperLogModule.WORKSPACE_TEMPLATE_SETTINGS, type = OperLogConstants.DELETE, beforeEvent = "#msClass.getLogDetails(#id)", msClass = TestCaseReportTemplateService.class)
public int delete(@PathVariable String id) {
return testCaseReportTemplateService.deleteTestCaseReportTemplate(id);
}
}

View File

@ -38,8 +38,6 @@ public class TestCaseReviewController {
TestReviewProjectService testReviewProjectService; TestReviewProjectService testReviewProjectService;
@Resource @Resource
CheckPermissionService trackCheckPermissionService; CheckPermissionService trackCheckPermissionService;
@Resource
private TestCaseCommentService testCaseCommentService;
@PostMapping("/list/{goPage}/{pageSize}") @PostMapping("/list/{goPage}/{pageSize}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REVIEW_READ) @RequiresPermissions(PermissionConstants.PROJECT_TRACK_REVIEW_READ)
@ -64,16 +62,19 @@ public class TestCaseReviewController {
} }
@PostMapping("/reviewer") @PostMapping("/reviewer")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REVIEW_READ)
public List<User> getUserByReviewId(@RequestBody TestCaseReview request) { public List<User> getUserByReviewId(@RequestBody TestCaseReview request) {
return testCaseReviewService.getUserByReviewId(request); return testCaseReviewService.getUserByReviewId(request);
} }
@PostMapping("/follow") @PostMapping("/follow")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REVIEW_READ)
public List<User> getFollowByReviewId(@RequestBody TestCaseReview request) { public List<User> getFollowByReviewId(@RequestBody TestCaseReview request) {
return testCaseReviewService.getFollowByReviewId(request); return testCaseReviewService.getFollowByReviewId(request);
} }
@GetMapping("/recent/{count}") @GetMapping("/recent/{count}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REVIEW_READ)
public List<TestCaseReviewDTO> recentTestPlans(@PathVariable int count) { public List<TestCaseReviewDTO> recentTestPlans(@PathVariable int count) {
String currentWorkspaceId = SessionUtils.getCurrentWorkspaceId(); String currentWorkspaceId = SessionUtils.getCurrentWorkspaceId();
PageHelper.startPage(1, count, true); PageHelper.startPage(1, count, true);
@ -105,12 +106,14 @@ public class TestCaseReviewController {
} }
@PostMapping("/relevance") @PostMapping("/relevance")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REVIEW_READ_RELEVANCE_OR_CANCEL)
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE_REVIEW, type = OperLogConstants.ASSOCIATE_CASE, content = "#msClass.getLogDetails(#request)", msClass = TestCaseReviewService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE_REVIEW, type = OperLogConstants.ASSOCIATE_CASE, content = "#msClass.getLogDetails(#request)", msClass = TestCaseReviewService.class)
public void testReviewRelevance(@RequestBody ReviewRelevanceRequest request) { public void testReviewRelevance(@RequestBody ReviewRelevanceRequest request) {
testCaseReviewService.testReviewRelevance(request); testCaseReviewService.testReviewRelevance(request);
} }
@PostMapping("/projects") @PostMapping("/projects")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REVIEW_READ)
public List<Project> getProjectByReviewId(@RequestBody TestReviewRelevanceRequest request) { public List<Project> getProjectByReviewId(@RequestBody TestReviewRelevanceRequest request) {
List<String> projectIds = testReviewProjectService.getProjectIdsByReviewId(); List<String> projectIds = testReviewProjectService.getProjectIdsByReviewId();
request.setProjectIds(projectIds); request.setProjectIds(projectIds);
@ -118,6 +121,7 @@ public class TestCaseReviewController {
} }
@PostMapping("/project/{goPage}/{pageSize}") @PostMapping("/project/{goPage}/{pageSize}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REVIEW_READ)
public Pager<List<Project>> getProjectByReviewId(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody TestReviewRelevanceRequest request) { public Pager<List<Project>> getProjectByReviewId(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody TestReviewRelevanceRequest request) {
List<String> projectIds = testReviewProjectService.getProjectIdsByReviewId(); List<String> projectIds = testReviewProjectService.getProjectIdsByReviewId();
request.setProjectIds(projectIds); request.setProjectIds(projectIds);
@ -142,6 +146,7 @@ public class TestCaseReviewController {
} }
@PostMapping("/list/all/relate/{goPage}/{pageSize}") @PostMapping("/list/all/relate/{goPage}/{pageSize}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REVIEW_READ)
public Pager<List<TestReviewDTOWithMetric>> listRelateAll(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody ReviewRelateRequest request) { public Pager<List<TestReviewDTOWithMetric>> listRelateAll(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody ReviewRelateRequest request) {
testCaseReviewService.setReviewIds(request); testCaseReviewService.setReviewIds(request);
Page<Object> page = PageHelper.startPage(goPage, pageSize, true); Page<Object> page = PageHelper.startPage(goPage, pageSize, true);

View File

@ -60,25 +60,26 @@ public class TestPlanController {
private TestPlanRerunService testPlanRerunService; private TestPlanRerunService testPlanRerunService;
@GetMapping("/auto-check/{testPlanId}") @GetMapping("/auto-check/{testPlanId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public void autoCheck(@PathVariable String testPlanId) { public void autoCheck(@PathVariable String testPlanId) {
testPlanService.checkTestPlanStatus(testPlanId); testPlanService.checkTestPlanStatus(testPlanId);
} }
@PostMapping("/list/{goPage}/{pageSize}") @PostMapping("/list/{goPage}/{pageSize}")
@RequiresPermissions("PROJECT_TRACK_PLAN:READ") @RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public Pager<List<TestPlanDTOWithMetric>> list(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestPlanRequest request) { public Pager<List<TestPlanDTOWithMetric>> list(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestPlanRequest request) {
Page<Object> page = PageHelper.startPage(goPage, pageSize, true); Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
return PageUtils.setPageInfo(page, testPlanService.listTestPlan(request)); return PageUtils.setPageInfo(page, testPlanService.listTestPlan(request));
} }
@PostMapping("/metric") @PostMapping("/metric")
@RequiresPermissions("PROJECT_TRACK_PLAN:READ") @RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public List<TestPlanDTOWithMetric> selectTestPlanMetricById(@RequestBody List<String> ids) { public List<TestPlanDTOWithMetric> selectTestPlanMetricById(@RequestBody List<String> ids) {
return testPlanService.selectTestPlanMetricById(ids); return testPlanService.selectTestPlanMetricById(ids);
} }
@PostMapping("/dashboard/list/{goPage}/{pageSize}") @PostMapping("/dashboard/list/{goPage}/{pageSize}")
@RequiresPermissions("PROJECT_TRACK_PLAN:READ") @RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public Pager<List<TestPlanDTOWithMetric>> listByWorkspaceId(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestPlanRequest request) { public Pager<List<TestPlanDTOWithMetric>> listByWorkspaceId(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestPlanRequest request) {
Page<Object> page = PageHelper.startPage(goPage, pageSize, true); Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
return PageUtils.setPageInfo(page, testPlanService.listByWorkspaceId(request)); return PageUtils.setPageInfo(page, testPlanService.listByWorkspaceId(request));
@ -86,6 +87,7 @@ public class TestPlanController {
/*jenkins测试计划*/ /*jenkins测试计划*/
@GetMapping("/list/all/{projectId}/{workspaceId}") @GetMapping("/list/all/{projectId}/{workspaceId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public List<TestPlanDTOWithMetric> listByProjectId(@PathVariable String projectId, @PathVariable String workspaceId) { public List<TestPlanDTOWithMetric> listByProjectId(@PathVariable String projectId, @PathVariable String workspaceId) {
QueryTestPlanRequest request = new QueryTestPlanRequest(); QueryTestPlanRequest request = new QueryTestPlanRequest();
request.setWorkspaceId(workspaceId); request.setWorkspaceId(workspaceId);
@ -100,18 +102,20 @@ public class TestPlanController {
} }
@PostMapping("/list/all/{goPage}/{pageSize}") @PostMapping("/list/all/{goPage}/{pageSize}")
@RequiresPermissions("PROJECT_TRACK_PLAN:READ") @RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public Pager<List<TestPlanDTO>> planListAll(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestPlanRequest request) { public Pager<List<TestPlanDTO>> planListAll(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestPlanRequest request) {
Page<Object> page = PageHelper.startPage(goPage, pageSize, true); Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
return PageUtils.setPageInfo(page, testPlanService.planListAll(request)); return PageUtils.setPageInfo(page, testPlanService.planListAll(request));
} }
@GetMapping("/get/stage/option/{projectId}") @GetMapping("/get/stage/option/{projectId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public List getStageOption(@PathVariable("projectId") String projectId) { public List getStageOption(@PathVariable("projectId") String projectId) {
return testPlanService.getStageOption(projectId); return testPlanService.getStageOption(projectId);
} }
@GetMapping("recent/{count}/{id}") @GetMapping("recent/{count}/{id}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public List<TestPlan> recentTestPlans(@PathVariable("count") int count, @PathVariable("id") String projectId) { public List<TestPlan> recentTestPlans(@PathVariable("count") int count, @PathVariable("id") String projectId) {
PageHelper.startPage(1, count, true); PageHelper.startPage(1, count, true);
return testPlanService.recentTestPlans(projectId); return testPlanService.recentTestPlans(projectId);
@ -143,6 +147,7 @@ public class TestPlanController {
@PostMapping("/fresh/{planId}") @PostMapping("/fresh/{planId}")
@MsRequestLog(module = OperLogModule.TRACK_TEST_PLAN) @MsRequestLog(module = OperLogModule.TRACK_TEST_PLAN)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public TestPlan freshRecentPlan(@PathVariable String planId) { public TestPlan freshRecentPlan(@PathVariable String planId) {
AddTestPlanRequest request = new AddTestPlanRequest(); AddTestPlanRequest request = new AddTestPlanRequest();
request.setId(planId); request.setId(planId);
@ -191,16 +196,19 @@ public class TestPlanController {
@PostMapping("/relevance") @PostMapping("/relevance")
@MsAuditLog(module = OperLogModule.TRACK_TEST_PLAN, type = OperLogConstants.ASSOCIATE_CASE, content = "#msClass.getLogDetails(#request)", msClass = TestPlanService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_PLAN, type = OperLogConstants.ASSOCIATE_CASE, content = "#msClass.getLogDetails(#request)", msClass = TestPlanService.class)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ_RELEVANCE_OR_CANCEL)
public void testPlanRelevance(@RequestBody PlanCaseRelevanceRequest request) { public void testPlanRelevance(@RequestBody PlanCaseRelevanceRequest request) {
testPlanService.testPlanRelevance(request); testPlanService.testPlanRelevance(request);
} }
@GetMapping("/project/name/{planId}") @GetMapping("/project/name/{planId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public String getProjectNameByPlanId(@PathVariable String planId) { public String getProjectNameByPlanId(@PathVariable String planId) {
return testPlanService.getProjectNameByPlanId(planId); return testPlanService.getProjectNameByPlanId(planId);
} }
@PostMapping("/project") @PostMapping("/project")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public List<Project> getProjectByPlanId(@RequestBody TestCaseRelevanceRequest request) { public List<Project> getProjectByPlanId(@RequestBody TestCaseRelevanceRequest request) {
List<String> projectIds = testPlanProjectService.getProjectIdsByPlanId(request.getPlanId()); List<String> projectIds = testPlanProjectService.getProjectIdsByPlanId(request.getPlanId());
request.setProjectIds(projectIds); request.setProjectIds(projectIds);
@ -208,6 +216,7 @@ public class TestPlanController {
} }
@PostMapping("/project/{goPage}/{pageSize}") @PostMapping("/project/{goPage}/{pageSize}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public Pager<List<Project>> getProjectByPlanId(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody TestCaseRelevanceRequest request) { public Pager<List<Project>> getProjectByPlanId(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody TestCaseRelevanceRequest request) {
List<String> projectIds = testPlanProjectService.getProjectIdsByPlanId(request.getPlanId()); List<String> projectIds = testPlanProjectService.getProjectIdsByPlanId(request.getPlanId());
request.setProjectIds(projectIds); request.setProjectIds(projectIds);
@ -216,6 +225,7 @@ public class TestPlanController {
} }
@PostMapping("/copy/{id}") @PostMapping("/copy/{id}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ_CREATE)
@MsAuditLog(module = OperLogModule.TRACK_TEST_PLAN, type = OperLogConstants.COPY, content = "#msClass.getLogDetails(#id)", msClass = TestPlanService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_PLAN, type = OperLogConstants.COPY, content = "#msClass.getLogDetails(#id)", msClass = TestPlanService.class)
@SendNotice(taskType = NoticeConstants.TaskType.TEST_PLAN_TASK, event = NoticeConstants.Event.CREATE, subject = "测试计划通知") @SendNotice(taskType = NoticeConstants.TaskType.TEST_PLAN_TASK, event = NoticeConstants.Event.CREATE, subject = "测试计划通知")
public TestPlan copy(@PathVariable String id) { public TestPlan copy(@PathVariable String id) {
@ -223,33 +233,39 @@ public class TestPlanController {
} }
@PostMapping("/api/case/env") @PostMapping("/api/case/env")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public Map<String, List<String>> getApiCaseEnv(@RequestBody List<String> caseIds) { public Map<String, List<String>> getApiCaseEnv(@RequestBody List<String> caseIds) {
return testPlanService.getApiCaseEnv(caseIds); return testPlanService.getApiCaseEnv(caseIds);
} }
@PostMapping("/api/scenario/env") @PostMapping("/api/scenario/env")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public Map<String, List<String>> getApiScenarioEnv(@RequestBody List<String> caseIds) { public Map<String, List<String>> getApiScenarioEnv(@RequestBody List<String> caseIds) {
return testPlanService.getApiScenarioEnv(caseIds); return testPlanService.getApiScenarioEnv(caseIds);
} }
@PostMapping("/case/env") @PostMapping("/case/env")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public Map<String, List<String>> getPlanCaseEnv(@RequestBody TestPlan plan) { public Map<String, List<String>> getPlanCaseEnv(@RequestBody TestPlan plan) {
return testPlanService.getPlanCaseEnv(plan.getId()); return testPlanService.getPlanCaseEnv(plan.getId());
} }
@PostMapping("/case/relevance/project/ids") @PostMapping("/case/relevance/project/ids")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public List<String> getRelevanceProjectIds(@RequestBody TestPlan plan) { public List<String> getRelevanceProjectIds(@RequestBody TestPlan plan) {
return testPlanService.getRelevanceProjectIds(plan.getId()); return testPlanService.getRelevanceProjectIds(plan.getId());
} }
@PostMapping("/edit/run/config") @PostMapping("/edit/run/config")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ_RUN)
@MsRequestLog(module = OperLogModule.TRACK_TEST_PLAN) @MsRequestLog(module = OperLogModule.TRACK_TEST_PLAN)
public void updateRunModeConfig(@RequestBody TestPlanRunRequest testplanRunRequest) { public void updateRunModeConfig(@RequestBody TestPlanRunRequest testplanRunRequest) {
testPlanService.updateRunModeConfig(testplanRunRequest); testPlanService.updateRunModeConfig(testplanRunRequest);
} }
@PostMapping("/run") @PostMapping("/run")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ_RUN)
@MsRequestLog(module = OperLogModule.TRACK_TEST_PLAN) @MsRequestLog(module = OperLogModule.TRACK_TEST_PLAN)
public String run(@RequestBody TestPlanRunRequest testplanRunRequest) { public String run(@RequestBody TestPlanRunRequest testplanRunRequest) {
if (baseUserService.getUserDTO(testplanRunRequest.getUserId()) == null) { if (baseUserService.getUserDTO(testplanRunRequest.getUserId()) == null) {
@ -259,6 +275,7 @@ public class TestPlanController {
} }
@PostMapping("/run/save") @PostMapping("/run/save")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ_RUN)
@MsRequestLog(module = OperLogModule.TRACK_TEST_PLAN) @MsRequestLog(module = OperLogModule.TRACK_TEST_PLAN)
public String runAndSave(@RequestBody TestPlanRunRequest testplanRunRequest) { public String runAndSave(@RequestBody TestPlanRunRequest testplanRunRequest) {
testPlanService.updateRunModeConfig(testplanRunRequest); testPlanService.updateRunModeConfig(testplanRunRequest);
@ -266,6 +283,7 @@ public class TestPlanController {
} }
@PostMapping(value = "/run/batch") @PostMapping(value = "/run/batch")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ_RUN)
@MsAuditLog(module = OperLogModule.TRACK_TEST_PLAN, type = OperLogConstants.EXECUTE, content = "#msClass.getLogDetails(#request.testPlanIds)", msClass = TestPlanService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_PLAN, type = OperLogConstants.EXECUTE, content = "#msClass.getLogDetails(#request.testPlanIds)", msClass = TestPlanService.class)
public void runBatch(@RequestBody TestPlanRunRequest request) { public void runBatch(@RequestBody TestPlanRunRequest request) {
request.setTriggerMode(TriggerMode.BATCH.name()); request.setTriggerMode(TriggerMode.BATCH.name());
@ -273,33 +291,39 @@ public class TestPlanController {
} }
@GetMapping("/report/export/{planId}/{lang}") @GetMapping("/report/export/{planId}/{lang}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REPORT_READ_EXPORT)
public void exportHtmlReport(@PathVariable String planId, @PathVariable(required = false) String lang, HttpServletResponse response) throws UnsupportedEncodingException, JsonProcessingException { public void exportHtmlReport(@PathVariable String planId, @PathVariable(required = false) String lang, HttpServletResponse response) throws UnsupportedEncodingException, JsonProcessingException {
testPlanService.exportPlanReport(planId, lang, response); testPlanService.exportPlanReport(planId, lang, response);
} }
@GetMapping("/get/report/export/{planId}") @GetMapping("/get/report/export/{planId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REPORT_READ_EXPORT)
public TestPlanReportDataStruct getExportHtmlReport(@PathVariable String planId, HttpServletResponse response) throws UnsupportedEncodingException { public TestPlanReportDataStruct getExportHtmlReport(@PathVariable String planId, HttpServletResponse response) throws UnsupportedEncodingException {
return testPlanService.buildPlanReport(planId, true); return testPlanService.buildPlanReport(planId, true);
} }
@GetMapping("/report/db/export/{reportId}/{lang}") @GetMapping("/report/db/export/{reportId}/{lang}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REPORT_READ_EXPORT)
public void exportHtmlDbReport(@PathVariable String reportId, @PathVariable(required = false) String lang, HttpServletResponse response) throws UnsupportedEncodingException, JsonProcessingException { public void exportHtmlDbReport(@PathVariable String reportId, @PathVariable(required = false) String lang, HttpServletResponse response) throws UnsupportedEncodingException, JsonProcessingException {
testPlanService.exportPlanDbReport(reportId, lang, response); testPlanService.exportPlanDbReport(reportId, lang, response);
} }
@GetMapping("/report/functional/result") @GetMapping("/report/functional/result")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REPORT_READ)
public TestCaseReportStatusResultDTO getFunctionalResultReport(@PathVariable String planId) { public TestCaseReportStatusResultDTO getFunctionalResultReport(@PathVariable String planId) {
return testPlanService.getFunctionalResultReport(planId); return testPlanService.getFunctionalResultReport(planId);
} }
@PostMapping("/edit/report") @PostMapping("/edit/report")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REPORT_READ_EDIT)
@MsRequestLog(module = OperLogModule.TRACK_TEST_PLAN) @MsRequestLog(module = OperLogModule.TRACK_TEST_PLAN)
public void editReport(@RequestBody TestPlanWithBLOBs testPlanWithBLOBs) { public void editReport(@RequestBody TestPlanWithBLOBs testPlanWithBLOBs) {
testPlanService.editReport(testPlanWithBLOBs); testPlanService.editReport(testPlanWithBLOBs);
} }
@PostMapping(value = "/schedule/update/enable") @PostMapping(value = "/schedule/update/enable")
public Schedule updateScheduleEnableByPrimyKey(@RequestBody ScheduleInfoRequest request) { @RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ_SCHEDULE)
public Schedule updateScheduleEnableByPrimaryKey(@RequestBody ScheduleInfoRequest request) {
Schedule schedule = baseScheduleService.getSchedule(request.getTaskID()); Schedule schedule = baseScheduleService.getSchedule(request.getTaskID());
schedule.setEnable(request.isEnable()); schedule.setEnable(request.isEnable());
testPlanService.updateSchedule(schedule); testPlanService.updateSchedule(schedule);
@ -307,6 +331,7 @@ public class TestPlanController {
} }
@PostMapping(value = "/schedule/update/disable") @PostMapping(value = "/schedule/update/disable")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ_SCHEDULE)
@SendNotice(taskType = NoticeConstants.TaskType.TRACK_HOME_TASK, event = NoticeConstants.Event.CLOSE_SCHEDULE, subject = "测试跟踪通知") @SendNotice(taskType = NoticeConstants.TaskType.TRACK_HOME_TASK, event = NoticeConstants.Event.CLOSE_SCHEDULE, subject = "测试跟踪通知")
public Schedule disableSchedule(@RequestBody ScheduleInfoRequest request) { public Schedule disableSchedule(@RequestBody ScheduleInfoRequest request) {
Schedule schedule = baseScheduleService.getSchedule(request.getTaskID()); Schedule schedule = baseScheduleService.getSchedule(request.getTaskID());
@ -321,6 +346,7 @@ public class TestPlanController {
* @return * @return
*/ */
@GetMapping("/have/exec/case/{id}") @GetMapping("/have/exec/case/{id}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public boolean haveExecCase(@PathVariable String id) { public boolean haveExecCase(@PathVariable String id) {
return testPlanService.haveExecCase(id, true); return testPlanService.haveExecCase(id, true);
} }
@ -332,32 +358,38 @@ public class TestPlanController {
* @return * @return
*/ */
@GetMapping("/have/ui/case/{id}") @GetMapping("/have/ui/case/{id}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public boolean haveUiCase(@PathVariable String id) { public boolean haveUiCase(@PathVariable String id) {
return testPlanService.haveUiCase(id); return testPlanService.haveUiCase(id);
} }
@GetMapping("/principal/{planId}") @GetMapping("/principal/{planId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public List<User> getPlanPrincipal(@PathVariable String planId) { public List<User> getPlanPrincipal(@PathVariable String planId) {
return testPlanService.getPlanPrincipal(planId); return testPlanService.getPlanPrincipal(planId);
} }
@GetMapping("/follow/{planId}") @GetMapping("/follow/{planId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public List<User> getPlanFollow(@PathVariable String planId) { public List<User> getPlanFollow(@PathVariable String planId) {
return testPlanService.getPlanFollow(planId); return testPlanService.getPlanFollow(planId);
} }
@PostMapping(value = "/schedule/batch/update_enable") @PostMapping(value = "/schedule/batch/update_enable")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ_SCHEDULE)
@MsRequestLog(module = OperLogModule.TRACK_TEST_PLAN_SCHEDULE) @MsRequestLog(module = OperLogModule.TRACK_TEST_PLAN_SCHEDULE)
public void updateBatchScheduleEnable(@RequestBody ScheduleInfoRequest request) { public void updateBatchScheduleEnable(@RequestBody ScheduleInfoRequest request) {
testPlanService.batchUpdateScheduleEnable(request); testPlanService.batchUpdateScheduleEnable(request);
} }
@PostMapping(value = "/schedule/enable/total") @PostMapping(value = "/schedule/enable/total")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public long countByScheduleEnableTotal(@RequestBody QueryTestPlanRequest request) { public long countByScheduleEnableTotal(@RequestBody QueryTestPlanRequest request) {
return testPlanService.countScheduleEnableTotal(request); return testPlanService.countScheduleEnableTotal(request);
} }
@PostMapping(value = "/update/schedule/enable") @PostMapping(value = "/update/schedule/enable")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ_SCHEDULE)
public ScheduleDTO updateTestPlanBySchedule(@RequestBody ScheduleInfoRequest request) { public ScheduleDTO updateTestPlanBySchedule(@RequestBody ScheduleInfoRequest request) {
Schedule schedule = baseScheduleService.getSchedule(request.getTaskID()); Schedule schedule = baseScheduleService.getSchedule(request.getTaskID());
schedule.setEnable(request.isEnable()); schedule.setEnable(request.isEnable());
@ -366,11 +398,13 @@ public class TestPlanController {
} }
@PostMapping(value = "/schedule/update") @PostMapping(value = "/schedule/update")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ_SCHEDULE)
public void updateSchedule(@RequestBody Schedule request) { public void updateSchedule(@RequestBody Schedule request) {
testPlanService.updateSchedule(request); testPlanService.updateSchedule(request);
} }
@PostMapping(value = "/schedule/create") @PostMapping(value = "/schedule/create")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ_SCHEDULE)
@MsAuditLog(module = OperLogModule.TRACK_TEST_PLAN_SCHEDULE, type = OperLogConstants.CREATE, @MsAuditLog(module = OperLogModule.TRACK_TEST_PLAN_SCHEDULE, type = OperLogConstants.CREATE,
title = "#request.name", content = "#msClass.getLogDetails(#request)", msClass = BaseScheduleService.class) title = "#request.name", content = "#msClass.getLogDetails(#request)", msClass = BaseScheduleService.class)
public void createSchedule(@RequestBody ScheduleRequest request) { public void createSchedule(@RequestBody ScheduleRequest request) {
@ -379,6 +413,7 @@ public class TestPlanController {
@GetMapping("/schedule/get/{testId}/{group}") @GetMapping("/schedule/get/{testId}/{group}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public Schedule schedule(@PathVariable String testId, @PathVariable String group) { public Schedule schedule(@PathVariable String testId, @PathVariable String group) {
Schedule schedule = baseScheduleService.getScheduleByResource(testId, group); Schedule schedule = baseScheduleService.getScheduleByResource(testId, group);
return schedule; return schedule;
@ -386,12 +421,14 @@ public class TestPlanController {
@PostMapping(value = "/rerun") @PostMapping(value = "/rerun")
@MsRequestLog(module = OperLogModule.TRACK_TEST_PLAN) @MsRequestLog(module = OperLogModule.TRACK_TEST_PLAN)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ_RUN)
public String rerun(@RequestBody TestPlanRerunParametersDTO request) { public String rerun(@RequestBody TestPlanRerunParametersDTO request) {
return testPlanRerunService.rerun(request); return testPlanRerunService.rerun(request);
} }
@GetMapping(value = "/status/reset/{planId}") @GetMapping(value = "/status/reset/{planId}")
@MsRequestLog(module = OperLogModule.TRACK_TEST_PLAN) @MsRequestLog(module = OperLogModule.TRACK_TEST_PLAN)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public void resetStatus(@PathVariable String planId) { public void resetStatus(@PathVariable String planId) {
testPlanService.resetStatus(planId); testPlanService.resetStatus(planId);
} }

View File

@ -7,6 +7,7 @@ import io.metersphere.base.domain.TestPlanReportContentWithBLOBs;
import io.metersphere.commons.constants.NoticeConstants; import io.metersphere.commons.constants.NoticeConstants;
import io.metersphere.commons.constants.OperLogConstants; import io.metersphere.commons.constants.OperLogConstants;
import io.metersphere.commons.constants.OperLogModule; import io.metersphere.commons.constants.OperLogModule;
import io.metersphere.commons.constants.PermissionConstants;
import io.metersphere.commons.utils.PageUtils; import io.metersphere.commons.utils.PageUtils;
import io.metersphere.commons.utils.Pager; import io.metersphere.commons.utils.Pager;
import io.metersphere.commons.utils.SessionUtils; import io.metersphere.commons.utils.SessionUtils;
@ -20,6 +21,7 @@ import io.metersphere.plan.request.TestPlanReportSaveRequest;
import io.metersphere.plan.service.TestPlanReportService; import io.metersphere.plan.service.TestPlanReportService;
import io.metersphere.request.report.QueryTestPlanReportRequest; import io.metersphere.request.report.QueryTestPlanReportRequest;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
@ -38,27 +40,32 @@ public class TestPlanReportController {
private TestPlanReportService testPlanReportService; private TestPlanReportService testPlanReportService;
@PostMapping("/list/{goPage}/{pageSize}") @PostMapping("/list/{goPage}/{pageSize}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REPORT_READ)
public Pager<List<TestPlanReportDTO>> list(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestPlanReportRequest request) { public Pager<List<TestPlanReportDTO>> list(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestPlanReportRequest request) {
Page<Object> page = PageHelper.startPage(goPage, pageSize, true); Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
return PageUtils.setPageInfo(page, testPlanReportService.list(request)); return PageUtils.setPageInfo(page, testPlanReportService.list(request));
} }
@GetMapping("/getMetric/{planId}") @GetMapping("/getMetric/{planId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REPORT_READ)
public TestPlanReportDTO getMetric(@PathVariable String planId) { public TestPlanReportDTO getMetric(@PathVariable String planId) {
return testPlanReportService.getMetric(planId); return testPlanReportService.getMetric(planId);
} }
@GetMapping("/real-time/{planId}") @GetMapping("/real-time/{planId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REPORT_READ)
public TestPlanReportDataStruct getRealTimeReport(@PathVariable String planId) { public TestPlanReportDataStruct getRealTimeReport(@PathVariable String planId) {
return testPlanReportService.getRealTimeReport(planId); return testPlanReportService.getRealTimeReport(planId);
} }
@GetMapping("/db/{reportId}") @GetMapping("/db/{reportId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REPORT_READ)
public TestPlanReportDataStruct getReport(@PathVariable String reportId) { public TestPlanReportDataStruct getReport(@PathVariable String reportId) {
return testPlanReportService.getReport(reportId); return testPlanReportService.getReport(reportId);
} }
@GetMapping("/status/{planId}") @GetMapping("/status/{planId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REPORT_READ)
public String getStatus(@PathVariable String planId) { public String getStatus(@PathVariable String planId) {
TestPlanReport report = testPlanReportService.getTestPlanReport(planId); TestPlanReport report = testPlanReportService.getTestPlanReport(planId);
String status = report.getStatus(); String status = report.getStatus();
@ -66,6 +73,7 @@ public class TestPlanReportController {
} }
@PostMapping("/delete") @PostMapping("/delete")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REPORT_READ_DELETE)
@MsAuditLog(module = OperLogModule.TRACK_REPORT, type = OperLogConstants.DELETE, beforeEvent = "#msClass.getLogDetails(#testPlanReportIdList)", msClass = TestPlanReportService.class) @MsAuditLog(module = OperLogModule.TRACK_REPORT, type = OperLogConstants.DELETE, beforeEvent = "#msClass.getLogDetails(#testPlanReportIdList)", msClass = TestPlanReportService.class)
@SendNotice(taskType = NoticeConstants.TaskType.TRACK_REPORT_TASK, target = "#targetClass.getReports(#testPlanReportIdList)", targetClass = TestPlanReportService.class, @SendNotice(taskType = NoticeConstants.TaskType.TRACK_REPORT_TASK, target = "#targetClass.getReports(#testPlanReportIdList)", targetClass = TestPlanReportService.class,
event = NoticeConstants.Event.DELETE, subject = "报告通知") event = NoticeConstants.Event.DELETE, subject = "报告通知")
@ -74,11 +82,13 @@ public class TestPlanReportController {
} }
@PostMapping("/deleteBatchByParams") @PostMapping("/deleteBatchByParams")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REPORT_READ_DELETE)
public void deleteBatchByParams(@RequestBody QueryTestPlanReportRequest request) { public void deleteBatchByParams(@RequestBody QueryTestPlanReportRequest request) {
testPlanReportService.delete(request); testPlanReportService.delete(request);
} }
@GetMapping("/saveTestPlanReport/{planId}/{triggerMode}") @GetMapping("/saveTestPlanReport/{planId}/{triggerMode}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REPORT_READ_EDIT)
public String saveTestPlanReport(@PathVariable String planId, @PathVariable String triggerMode) { public String saveTestPlanReport(@PathVariable String planId, @PathVariable String triggerMode) {
String userId = SessionUtils.getUser().getId(); String userId = SessionUtils.getUser().getId();
String reportId = UUID.randomUUID().toString(); String reportId = UUID.randomUUID().toString();
@ -91,12 +101,14 @@ public class TestPlanReportController {
@PostMapping("/reName") @PostMapping("/reName")
@MsRequestLog(module = OperLogModule.TRACK_REPORT) @MsRequestLog(module = OperLogModule.TRACK_REPORT)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REPORT_READ_EDIT)
public void reName(@RequestBody TestPlanReport request) { public void reName(@RequestBody TestPlanReport request) {
testPlanReportService.reName(request.getId(), request.getName()); testPlanReportService.reName(request.getId(), request.getName());
} }
@PostMapping("/edit/report") @PostMapping("/edit/report")
@MsRequestLog(module = OperLogModule.TRACK_REPORT) @MsRequestLog(module = OperLogModule.TRACK_REPORT)
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REPORT_READ_EDIT)
public void editReport(@RequestBody TestPlanReportContentWithBLOBs reportContentWithBLOBs) { public void editReport(@RequestBody TestPlanReportContentWithBLOBs reportContentWithBLOBs) {
testPlanReportService.editReport(reportContentWithBLOBs); testPlanReportService.editReport(reportContentWithBLOBs);
} }

View File

@ -5,6 +5,7 @@ import com.github.pagehelper.PageHelper;
import io.metersphere.base.domain.TestPlanTestCaseWithBLOBs; import io.metersphere.base.domain.TestPlanTestCaseWithBLOBs;
import io.metersphere.commons.constants.OperLogConstants; import io.metersphere.commons.constants.OperLogConstants;
import io.metersphere.commons.constants.OperLogModule; import io.metersphere.commons.constants.OperLogModule;
import io.metersphere.commons.constants.PermissionConstants;
import io.metersphere.commons.utils.PageUtils; import io.metersphere.commons.utils.PageUtils;
import io.metersphere.commons.utils.Pager; import io.metersphere.commons.utils.Pager;
import io.metersphere.dto.TestPlanCaseDTO; import io.metersphere.dto.TestPlanCaseDTO;
@ -17,6 +18,7 @@ import io.metersphere.plan.request.function.TestPlanFuncCaseEditRequest;
import io.metersphere.plan.service.TestPlanTestCaseService; import io.metersphere.plan.service.TestPlanTestCaseService;
import io.metersphere.request.ResetOrderRequest; import io.metersphere.request.ResetOrderRequest;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -31,6 +33,7 @@ public class TestPlanTestCaseController {
TestPlanTestCaseService testPlanTestCaseService; TestPlanTestCaseService testPlanTestCaseService;
@PostMapping("/list/{goPage}/{pageSize}") @PostMapping("/list/{goPage}/{pageSize}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public Pager<List<TestPlanCaseDTO>> getTestPlanCases(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestPlanCaseRequest request) { public Pager<List<TestPlanCaseDTO>> getTestPlanCases(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestPlanCaseRequest request) {
QueryTestPlanCaseRequest paramRequest = testPlanTestCaseService.setCustomNumOrderParam(request); QueryTestPlanCaseRequest paramRequest = testPlanTestCaseService.setCustomNumOrderParam(request);
Page<Object> page = PageHelper.startPage(goPage, pageSize, true); Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
@ -40,6 +43,7 @@ public class TestPlanTestCaseController {
/*jenkins测试计划下全部用例*/ /*jenkins测试计划下全部用例*/
@GetMapping("/list/{planId}") @GetMapping("/list/{planId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public List<TestPlanCaseDTO> getTestPlanCaseByPlanId(@PathVariable String planId) { public List<TestPlanCaseDTO> getTestPlanCaseByPlanId(@PathVariable String planId) {
QueryTestPlanCaseRequest request = new QueryTestPlanCaseRequest(); QueryTestPlanCaseRequest request = new QueryTestPlanCaseRequest();
request.setPlanId(planId); request.setPlanId(planId);
@ -48,17 +52,20 @@ public class TestPlanTestCaseController {
} }
@PostMapping("/list/minder") @PostMapping("/list/minder")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public List<TestPlanCaseDTO> listForMinder(@RequestBody QueryTestPlanCaseRequest request) { public List<TestPlanCaseDTO> listForMinder(@RequestBody QueryTestPlanCaseRequest request) {
return testPlanTestCaseService.listForMinder(request); return testPlanTestCaseService.listForMinder(request);
} }
@PostMapping("/list/minder/{goPage}/{pageSize}") @PostMapping("/list/minder/{goPage}/{pageSize}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public Pager<List<TestPlanCaseDTO>> listForMinder(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestPlanCaseRequest request) { public Pager<List<TestPlanCaseDTO>> listForMinder(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryTestPlanCaseRequest request) {
Page<Object> page = PageHelper.startPage(goPage, pageSize, true); Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
return PageUtils.setPageInfo(page, testPlanTestCaseService.listForMinder(request)); return PageUtils.setPageInfo(page, testPlanTestCaseService.listForMinder(request));
} }
@GetMapping("/list/node/{planId}/{nodePaths}") @GetMapping("/list/node/{planId}/{nodePaths}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public List<TestPlanCaseDTO> getTestPlanCasesByNodePath(@PathVariable String planId, @PathVariable String nodePaths) { public List<TestPlanCaseDTO> getTestPlanCasesByNodePath(@PathVariable String planId, @PathVariable String nodePaths) {
String nodePath = nodePaths.replace("f", "/"); String nodePath = nodePaths.replace("f", "/");
String[] array = nodePath.split(","); String[] array = nodePath.split(",");
@ -71,6 +78,7 @@ public class TestPlanTestCaseController {
} }
@GetMapping("/list/node/all/{planId}/{nodePaths}") @GetMapping("/list/node/all/{planId}/{nodePaths}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public List<TestPlanCaseDTO> getTestPlanCasesByNodePaths(@PathVariable String planId, @PathVariable String nodePaths) { public List<TestPlanCaseDTO> getTestPlanCasesByNodePaths(@PathVariable String planId, @PathVariable String nodePaths) {
String nodePath = nodePaths.replace("f", StringUtils.EMPTY); String nodePath = nodePaths.replace("f", StringUtils.EMPTY);
String[] array = nodePath.split(","); String[] array = nodePath.split(",");
@ -83,71 +91,84 @@ public class TestPlanTestCaseController {
} }
@GetMapping("/get/{caseId}") @GetMapping("/get/{caseId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public TestPlanCaseDTO getTestPlanCases(@PathVariable String caseId) { public TestPlanCaseDTO getTestPlanCases(@PathVariable String caseId) {
return testPlanTestCaseService.get(caseId); return testPlanTestCaseService.get(caseId);
} }
@PostMapping("recent/{count}") @PostMapping("recent/{count}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public List<TestPlanCaseDTO> getRecentTestCases(@PathVariable int count, @RequestBody QueryTestPlanCaseRequest request) { public List<TestPlanCaseDTO> getRecentTestCases(@PathVariable int count, @RequestBody QueryTestPlanCaseRequest request) {
return testPlanTestCaseService.getRecentTestCases(request, count); return testPlanTestCaseService.getRecentTestCases(request, count);
} }
@PostMapping("pending/{count}") @PostMapping("pending/{count}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public List<TestPlanCaseDTO> getPrepareTestCases(@PathVariable int count, @RequestBody QueryTestPlanCaseRequest request) { public List<TestPlanCaseDTO> getPrepareTestCases(@PathVariable int count, @RequestBody QueryTestPlanCaseRequest request) {
return testPlanTestCaseService.getPendingTestCases(request, count); return testPlanTestCaseService.getPendingTestCases(request, count);
} }
@PostMapping("/list/all") @PostMapping("/list/all")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public List<TestPlanCaseDTO> getTestPlanCases(@RequestBody QueryTestPlanCaseRequest request) { public List<TestPlanCaseDTO> getTestPlanCases(@RequestBody QueryTestPlanCaseRequest request) {
return testPlanTestCaseService.list(request); return testPlanTestCaseService.list(request);
} }
@PostMapping("/idList/all") @PostMapping("/idList/all")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public List<String> getTestPlanCases(@RequestBody TestPlanFuncCaseBatchRequest request) { public List<String> getTestPlanCases(@RequestBody TestPlanFuncCaseBatchRequest request) {
return testPlanTestCaseService.idList(request); return testPlanTestCaseService.idList(request);
} }
@PostMapping("/edit") @PostMapping("/edit")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ_RUN)
@MsAuditLog(module = OperLogModule.TRACK_TEST_CASE_REVIEW, type = OperLogConstants.UPDATE, content = "#msClass.getLogDetails(#testPlanTestCase.id)", msClass = TestPlanTestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_CASE_REVIEW, type = OperLogConstants.UPDATE, content = "#msClass.getLogDetails(#testPlanTestCase.id)", msClass = TestPlanTestCaseService.class)
public void editTestCase(@RequestBody TestPlanFuncCaseEditRequest testPlanTestCase) { public void editTestCase(@RequestBody TestPlanFuncCaseEditRequest testPlanTestCase) {
testPlanTestCaseService.editTestCase(testPlanTestCase); testPlanTestCaseService.editTestCase(testPlanTestCase);
} }
@PostMapping("/minder/edit") @PostMapping("/minder/edit")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ_RUN)
@MsAuditLog(module = OperLogModule.TRACK_TEST_PLAN, type = OperLogConstants.ASSOCIATE_CASE, content = "#msClass.getCaseLogDetails(#testPlanTestCases)", msClass = TestPlanTestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_PLAN, type = OperLogConstants.ASSOCIATE_CASE, content = "#msClass.getCaseLogDetails(#testPlanTestCases)", msClass = TestPlanTestCaseService.class)
public void editTestCaseForMinder(@RequestBody List<TestPlanTestCaseWithBLOBs> testPlanTestCases) { public void editTestCaseForMinder(@RequestBody List<TestPlanTestCaseWithBLOBs> testPlanTestCases) {
testPlanTestCaseService.editTestCaseForMinder(testPlanTestCases); testPlanTestCaseService.editTestCaseForMinder(testPlanTestCases);
} }
@PostMapping("/batch/edit") @PostMapping("/batch/edit")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ_RUN)
@MsAuditLog(module = OperLogModule.TRACK_TEST_PLAN, type = OperLogConstants.BATCH_UPDATE, beforeEvent = "#msClass.batchLogDetails(#request.ids)", content = "#msClass.getLogDetails(#request.ids)", msClass = TestPlanTestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_PLAN, type = OperLogConstants.BATCH_UPDATE, beforeEvent = "#msClass.batchLogDetails(#request.ids)", content = "#msClass.getLogDetails(#request.ids)", msClass = TestPlanTestCaseService.class)
public void editTestCaseBath(@RequestBody TestPlanCaseBatchRequest request) { public void editTestCaseBath(@RequestBody TestPlanCaseBatchRequest request) {
testPlanTestCaseService.editTestCaseBath(request); testPlanTestCaseService.editTestCaseBath(request);
} }
@PostMapping("/batch/delete") @PostMapping("/batch/delete")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ_RELEVANCE_OR_CANCEL)
@MsAuditLog(module = OperLogModule.TRACK_TEST_PLAN, type = OperLogConstants.UN_ASSOCIATE_CASE, beforeEvent = "#msClass.getLogDetails(#request.ids)", msClass = TestPlanTestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_PLAN, type = OperLogConstants.UN_ASSOCIATE_CASE, beforeEvent = "#msClass.getLogDetails(#request.ids)", msClass = TestPlanTestCaseService.class)
public void deleteTestCaseBath(@RequestBody TestPlanCaseBatchRequest request) { public void deleteTestCaseBath(@RequestBody TestPlanCaseBatchRequest request) {
testPlanTestCaseService.deleteTestCaseBath(request); testPlanTestCaseService.deleteTestCaseBath(request);
} }
@PostMapping("/delete/{id}") @PostMapping("/delete/{id}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ_RELEVANCE_OR_CANCEL)
@MsAuditLog(module = OperLogModule.TRACK_TEST_PLAN, type = OperLogConstants.UN_ASSOCIATE_CASE, beforeEvent = "#msClass.getLogDetails(#id)", msClass = TestPlanTestCaseService.class) @MsAuditLog(module = OperLogModule.TRACK_TEST_PLAN, type = OperLogConstants.UN_ASSOCIATE_CASE, beforeEvent = "#msClass.getLogDetails(#id)", msClass = TestPlanTestCaseService.class)
public int deleteTestCase(@PathVariable String id) { public int deleteTestCase(@PathVariable String id) {
return testPlanTestCaseService.deleteTestCase(id); return testPlanTestCaseService.deleteTestCase(id);
} }
@PostMapping("/list/all/{planId}") @PostMapping("/list/all/{planId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public List<TestPlanCaseDTO> getFailureCases(@PathVariable String planId, @RequestBody(required = false) List<String> statusList) { public List<TestPlanCaseDTO> getFailureCases(@PathVariable String planId, @RequestBody(required = false) List<String> statusList) {
return testPlanTestCaseService.getAllCasesByStatusList(planId, statusList); return testPlanTestCaseService.getAllCasesByStatusList(planId, statusList);
} }
@GetMapping("/list/all/{planId}") @GetMapping("/list/all/{planId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
public List<TestPlanCaseDTO> getAllCases(@PathVariable String planId) { public List<TestPlanCaseDTO> getAllCases(@PathVariable String planId) {
return testPlanTestCaseService.getAllCases(planId); return testPlanTestCaseService.getAllCases(planId);
} }
@PostMapping("/edit/order") @PostMapping("/edit/order")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_PLAN_READ)
@MsRequestLog(module = OperLogModule.TRACK_TEST_PLAN) @MsRequestLog(module = OperLogModule.TRACK_TEST_PLAN)
public void orderCase(@RequestBody ResetOrderRequest request) { public void orderCase(@RequestBody ResetOrderRequest request) {
testPlanTestCaseService.updateOrder(request); testPlanTestCaseService.updateOrder(request);

View File

@ -32,7 +32,8 @@ public class TestReviewTestCaseController {
TestReviewTestCaseService testReviewTestCaseService; TestReviewTestCaseService testReviewTestCaseService;
@PostMapping("/list/{goPage}/{pageSize}") @PostMapping("/list/{goPage}/{pageSize}")
public Pager<List<TestReviewCaseDTO>> getTestPlanCases(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryCaseReviewRequest request) { @RequiresPermissions(PermissionConstants.PROJECT_TRACK_REVIEW_READ)
public Pager<List<TestReviewCaseDTO>> getTestReviewCases(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryCaseReviewRequest request) {
Page<Object> page = PageHelper.startPage(goPage, pageSize, true); Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
return PageUtils.setPageInfo(page, testReviewTestCaseService.list(request)); return PageUtils.setPageInfo(page, testReviewTestCaseService.list(request));
} }
@ -73,11 +74,13 @@ public class TestReviewTestCaseController {
} }
@PostMapping("/list/minder") @PostMapping("/list/minder")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REVIEW_READ)
public List<TestReviewCaseDTO> listForMinder(@RequestBody QueryCaseReviewRequest request) { public List<TestReviewCaseDTO> listForMinder(@RequestBody QueryCaseReviewRequest request) {
return testReviewTestCaseService.listForMinder(request); return testReviewTestCaseService.listForMinder(request);
} }
@PostMapping("/list/minder/{goPage}/{pageSize}") @PostMapping("/list/minder/{goPage}/{pageSize}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REVIEW_READ)
public Pager<List<TestReviewCaseDTO>> listForMinder(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryCaseReviewRequest request) { public Pager<List<TestReviewCaseDTO>> listForMinder(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody QueryCaseReviewRequest request) {
Page<Object> page = PageHelper.startPage(goPage, pageSize, true); Page<Object> page = PageHelper.startPage(goPage, pageSize, true);
return PageUtils.setPageInfo(page, testReviewTestCaseService.listForMinder(request)); return PageUtils.setPageInfo(page, testReviewTestCaseService.listForMinder(request));
@ -91,16 +94,19 @@ public class TestReviewTestCaseController {
} }
@GetMapping("/get/{reviewId}") @GetMapping("/get/{reviewId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REVIEW_READ)
public TestReviewCaseDTO get(@PathVariable String reviewId) { public TestReviewCaseDTO get(@PathVariable String reviewId) {
return testReviewTestCaseService.get(reviewId); return testReviewTestCaseService.get(reviewId);
} }
@GetMapping("/reviewer/status/{id}") @GetMapping("/reviewer/status/{id}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REVIEW_READ)
public List<TestCaseComment> getReviewerStatusComment(@PathVariable String id) { public List<TestCaseComment> getReviewerStatusComment(@PathVariable String id) {
return testReviewTestCaseService.getReviewerStatusComment(id); return testReviewTestCaseService.getReviewerStatusComment(id);
} }
@PostMapping("/edit/order") @PostMapping("/edit/order")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_REVIEW_READ)
@MsRequestLog(module = OperLogModule.TRACK_TEST_CASE_REVIEW) @MsRequestLog(module = OperLogModule.TRACK_TEST_CASE_REVIEW)
public void orderCase(@RequestBody ResetOrderRequest request) { public void orderCase(@RequestBody ResetOrderRequest request) {
testReviewTestCaseService.updateOrder(request); testReviewTestCaseService.updateOrder(request);

View File

@ -4,6 +4,7 @@ package io.metersphere.controller;
import com.github.pagehelper.Page; import com.github.pagehelper.Page;
import io.metersphere.base.domain.TestCase; import io.metersphere.base.domain.TestCase;
import io.metersphere.commons.constants.MicroServiceName; import io.metersphere.commons.constants.MicroServiceName;
import io.metersphere.commons.constants.PermissionConstants;
import io.metersphere.commons.utils.PageUtils; import io.metersphere.commons.utils.PageUtils;
import io.metersphere.commons.utils.Pager; import io.metersphere.commons.utils.Pager;
import io.metersphere.dto.*; import io.metersphere.dto.*;
@ -16,6 +17,7 @@ import io.metersphere.utils.DiscoveryUtil;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -34,6 +36,7 @@ public class TrackController {
private TestCaseService testCaseService; private TestCaseService testCaseService;
@GetMapping("/count/{projectId}") @GetMapping("/count/{projectId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_HOME)
public TrackStatisticsDTO getTrackCount(@PathVariable String projectId) { public TrackStatisticsDTO getTrackCount(@PathVariable String projectId) {
TrackStatisticsDTO statistics = new TrackStatisticsDTO(); TrackStatisticsDTO statistics = new TrackStatisticsDTO();
@ -64,6 +67,7 @@ public class TrackController {
} }
@GetMapping("/failure/case/about/plan/{projectId}/{versionId}/{pageSize}/{goPage}") @GetMapping("/failure/case/about/plan/{projectId}/{versionId}/{pageSize}/{goPage}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_HOME)
public Pager<List<ExecutedCaseInfoDTO>> failureCaseAboutTestPlan(@PathVariable String projectId, @PathVariable String versionId, public Pager<List<ExecutedCaseInfoDTO>> failureCaseAboutTestPlan(@PathVariable String projectId, @PathVariable String versionId,
@PathVariable int pageSize, @PathVariable int goPage) { @PathVariable int pageSize, @PathVariable int goPage) {
if (StringUtils.equalsIgnoreCase(versionId, "default")) { if (StringUtils.equalsIgnoreCase(versionId, "default")) {
@ -102,6 +106,7 @@ public class TrackController {
@GetMapping("/relevance/count/{projectId}") @GetMapping("/relevance/count/{projectId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_HOME)
public TrackStatisticsDTO getRelevanceCount(@PathVariable String projectId) { public TrackStatisticsDTO getRelevanceCount(@PathVariable String projectId) {
TrackStatisticsDTO statistics = new TrackStatisticsDTO(); TrackStatisticsDTO statistics = new TrackStatisticsDTO();
@ -143,11 +148,13 @@ public class TrackController {
} }
@GetMapping("/case/bar/{projectId}") @GetMapping("/case/bar/{projectId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_HOME)
public List<ChartsData> getCaseMaintenanceBar(@PathVariable String projectId) { public List<ChartsData> getCaseMaintenanceBar(@PathVariable String projectId) {
return trackService.getCaseMaintenanceBar(projectId); return trackService.getCaseMaintenanceBar(projectId);
} }
@GetMapping("/bug/count/{projectId}") @GetMapping("/bug/count/{projectId}")
@RequiresPermissions(PermissionConstants.PROJECT_TRACK_HOME)
public BugStatistics getBugStatistics(@PathVariable String projectId) { public BugStatistics getBugStatistics(@PathVariable String projectId) {
return trackService.getBugStatistics(projectId); return trackService.getBugStatistics(projectId);
} }

View File

@ -1,87 +0,0 @@
package io.metersphere.service;
import io.metersphere.base.domain.TestCaseReport;
import io.metersphere.base.domain.TestCaseReportExample;
import io.metersphere.base.domain.TestCaseReportTemplate;
import io.metersphere.base.domain.TestPlanWithBLOBs;
import io.metersphere.base.mapper.TestCaseReportMapper;
import io.metersphere.base.mapper.TestCaseReportTemplateMapper;
import io.metersphere.base.mapper.TestPlanMapper;
import io.metersphere.commons.utils.BeanUtils;
import io.metersphere.commons.utils.JSON;
import io.metersphere.commons.utils.SessionUtils;
import io.metersphere.log.utils.ReflexObjectUtil;
import io.metersphere.log.vo.DetailColumn;
import io.metersphere.log.vo.OperatingLogDetails;
import io.metersphere.log.vo.track.TestPlanReference;
import io.metersphere.request.testCaseReport.CreateReportRequest;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import jakarta.annotation.Resource;
import java.util.List;
import java.util.UUID;
@Service
@Transactional(rollbackFor = Exception.class)
public class TestCaseReportService {
@Resource
TestCaseReportMapper testCaseReportMapper;
@Resource
TestPlanMapper testPlanMapper;
@Resource
TestCaseReportTemplateMapper testCaseReportTemplateMapper;
public List<TestCaseReport> listTestCaseReport(TestCaseReport request) {
TestCaseReportExample example = new TestCaseReportExample();
if (StringUtils.isNotBlank(request.getName())) {
example.createCriteria().andNameEqualTo(request.getName());
}
return testCaseReportMapper.selectByExample(example);
}
public TestCaseReport getTestCaseReport(String id) {
return testCaseReportMapper.selectByPrimaryKey(id);
}
public void addTestCaseReport(TestCaseReport testCaseReport) {
testCaseReport.setId(UUID.randomUUID().toString());
testCaseReportMapper.insert(testCaseReport);
}
public void editTestCaseReport(TestCaseReport TestCaseReport) {
testCaseReportMapper.updateByPrimaryKeyWithBLOBs(TestCaseReport);
}
public int deleteTestCaseReport(String id) {
return testCaseReportMapper.deleteByPrimaryKey(id);
}
public String addTestCaseReportByTemplateId(CreateReportRequest request) {
TestCaseReportTemplate template = testCaseReportTemplateMapper.selectByPrimaryKey(request.getTemplateId());
TestCaseReport report = new TestCaseReport();
BeanUtils.copyBean(report, template);
TestPlanWithBLOBs testPlan = testPlanMapper.selectByPrimaryKey(request.getPlanId());
report.setName(testPlan.getName());
report.setId(request.getId());
report.setCreateUser(SessionUtils.getUserId());
testCaseReportMapper.insert(report);
testPlan.setReportId(report.getId());
testPlanMapper.updateByPrimaryKeySelective(testPlan);
return report.getId();
}
public String getLogDetails(String id) {
TestCaseReport report = testCaseReportMapper.selectByPrimaryKey(id);
if (report != null) {
List<DetailColumn> columns = ReflexObjectUtil.getColumns(report, TestPlanReference.reportColumns);
OperatingLogDetails details = new OperatingLogDetails(JSON.toJSONString(report.getId()), null, report.getName(), report.getCreateUser(), columns);
return JSON.toJSONString(details);
}
return null;
}
}

View File

@ -1,87 +0,0 @@
package io.metersphere.service;
import io.metersphere.base.domain.TestCaseReportTemplate;
import io.metersphere.base.domain.TestCaseReportTemplateExample;
import io.metersphere.base.mapper.TestCaseReportTemplateMapper;
import io.metersphere.commons.exception.MSException;
import io.metersphere.commons.utils.JSON;
import io.metersphere.commons.utils.SessionUtils;
import io.metersphere.i18n.Translator;
import io.metersphere.log.utils.ReflexObjectUtil;
import io.metersphere.log.vo.DetailColumn;
import io.metersphere.log.vo.OperatingLogDetails;
import io.metersphere.log.vo.system.SystemReference;
import io.metersphere.request.testCaseReport.QueryTemplateRequest;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import jakarta.annotation.Resource;
import java.util.List;
import java.util.UUID;
@Service
@Transactional(rollbackFor = Exception.class)
public class TestCaseReportTemplateService {
@Resource
TestCaseReportTemplateMapper testCaseReportTemplateMapper;
public List<TestCaseReportTemplate> listTestCaseReportTemplate(QueryTemplateRequest request) {
TestCaseReportTemplateExample example = new TestCaseReportTemplateExample();
TestCaseReportTemplateExample.Criteria criteria1 = example.createCriteria();
TestCaseReportTemplateExample.Criteria criteria2 = example.createCriteria();
if (StringUtils.isNotBlank(request.getName())) {
criteria1.andNameLike("%" + request.getName() + "%");
criteria2.andNameLike("%" + request.getName() + "%");
}
if (StringUtils.isNotBlank(request.getWorkspaceId())) {
criteria1.andWorkspaceIdEqualTo(request.getWorkspaceId());
}
if (request.getQueryDefault() != null) {
criteria2.andWorkspaceIdIsNull();
example.or(criteria2);
}
return testCaseReportTemplateMapper.selectByExample(example);
}
public TestCaseReportTemplate getTestCaseReportTemplate(String id) {
return testCaseReportTemplateMapper.selectByPrimaryKey(id);
}
public void addTestCaseReportTemplate(TestCaseReportTemplate testCaseReportTemplate) {
testCaseReportTemplate.setId(UUID.randomUUID().toString());
checkCaseReportTemplateExist(testCaseReportTemplate);
testCaseReportTemplateMapper.insert(testCaseReportTemplate);
}
public void editTestCaseReportTemplate(TestCaseReportTemplate testCaseReportTemplate) {
checkCaseReportTemplateExist(testCaseReportTemplate);
testCaseReportTemplateMapper.updateByPrimaryKeyWithBLOBs(testCaseReportTemplate);
}
private void checkCaseReportTemplateExist(TestCaseReportTemplate testCaseReportTemplate) {
TestCaseReportTemplateExample example = new TestCaseReportTemplateExample();
example.createCriteria()
.andNameEqualTo(testCaseReportTemplate.getName())
.andWorkspaceIdEqualTo(SessionUtils.getCurrentWorkspaceId())
.andIdNotEqualTo(testCaseReportTemplate.getId());
if (testCaseReportTemplateMapper.selectByExample(example).size() > 0) {
MSException.throwException(Translator.get("test_case_report_template_repeat"));
}
}
public int deleteTestCaseReportTemplate(String id) {
return testCaseReportTemplateMapper.deleteByPrimaryKey(id);
}
public String getLogDetails(String id) {
TestCaseReportTemplate templateWithBLOBs = testCaseReportTemplateMapper.selectByPrimaryKey(id);
if (templateWithBLOBs != null) {
List<DetailColumn> columns = ReflexObjectUtil.getColumns(templateWithBLOBs, SystemReference.issueFieldColumns);
OperatingLogDetails details = new OperatingLogDetails(JSON.toJSONString(templateWithBLOBs.getId()), null, templateWithBLOBs.getName(), templateWithBLOBs.getCreateUser(), columns);
return JSON.toJSONString(details);
}
return null;
}
}

View File

@ -56,7 +56,7 @@ public class LocalPlatform extends LocalAbstractPlatform {
issues.setReporter(user.getId()); issues.setReporter(user.getId());
issues.setCreateTime(System.currentTimeMillis()); issues.setCreateTime(System.currentTimeMillis());
issues.setUpdateTime(System.currentTimeMillis()); issues.setUpdateTime(System.currentTimeMillis());
issues.setPlatform(IssuesManagePlatform.Local.toString());; issues.setPlatform(IssuesManagePlatform.Local.toString());
issues.setNum(getNextNum(issuesRequest.getProjectId())); issues.setNum(getNextNum(issuesRequest.getProjectId()));
issuesMapper.insert(issues); issuesMapper.insert(issues);