From c1fd1017a501a8402183db634e0d3020f3aa7fe0 Mon Sep 17 00:00:00 2001 From: wxg0103 <727495428@qq.com> Date: Wed, 21 Jun 2023 16:18:41 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=8E=A5=E5=8F=A3=E6=B5=8B=E8=AF=95):=20?= =?UTF-8?q?=E5=90=8C=E6=AD=A51.20=E7=9A=84=E7=BC=BA=E9=99=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/definition/ApiDefinitionController.java | 3 ++- .../controller/mock/MockConfigController.java | 4 ++++ .../controller/scenario/ApiScenarioController.java | 6 +++--- .../src/business/automation/scenario/ApiScenarioList.vue | 7 ++++--- .../src/business/automation/scenario/EditApiScenario.vue | 3 --- .../definition/components/EditCompleteContainer.vue | 1 + .../components/complete/EditCompleteDubboApi.vue | 7 ++++++- .../components/complete/EditCompleteHTTPApi.vue | 6 +++++- .../components/complete/EditCompleteSQLApi.vue | 7 ++++++- .../components/complete/EditCompleteTCPApi.vue | 7 ++++++- .../definition/components/runtest/RunTestHTTPPage.vue | 9 +++++---- .../commons/constants/PermissionConstants.java | 1 + 12 files changed, 43 insertions(+), 18 deletions(-) diff --git a/api-test/backend/src/main/java/io/metersphere/controller/definition/ApiDefinitionController.java b/api-test/backend/src/main/java/io/metersphere/controller/definition/ApiDefinitionController.java index 71fe3237b1..ca7a61481b 100644 --- a/api-test/backend/src/main/java/io/metersphere/controller/definition/ApiDefinitionController.java +++ b/api-test/backend/src/main/java/io/metersphere/controller/definition/ApiDefinitionController.java @@ -37,6 +37,7 @@ import io.metersphere.service.definition.ApiDefinitionService; import io.metersphere.service.definition.FunctionRunService; import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.authz.annotation.Logical; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -179,7 +180,7 @@ public class ApiDefinitionController { } @PostMapping(value = "/run/debug", consumes = {"multipart/form-data"}) - @RequiresPermissions(PermissionConstants.PROJECT_API_DEFINITION_READ_DEBUG) + @RequiresPermissions(value = {PermissionConstants.PROJECT_API_DEFINITION_READ_DEBUG, PermissionConstants.PROJECT_API_DEFINITION_READ_RUN}, logical = Logical.OR) @MsAuditLog(module = OperLogModule.API_DEFINITION, type = OperLogConstants.DEBUG, title = "#request.name", project = "#request.projectId") public MsExecResponseDTO runDebug(@RequestPart("request") RunDefinitionRequest request, @RequestPart(value = "files", required = false) List bodyFiles) { return apiDefinitionService.run(request, bodyFiles); diff --git a/api-test/backend/src/main/java/io/metersphere/controller/mock/MockConfigController.java b/api-test/backend/src/main/java/io/metersphere/controller/mock/MockConfigController.java index 8f4d6c1c37..fa656e73c1 100644 --- a/api-test/backend/src/main/java/io/metersphere/controller/mock/MockConfigController.java +++ b/api-test/backend/src/main/java/io/metersphere/controller/mock/MockConfigController.java @@ -12,11 +12,13 @@ import io.metersphere.base.domain.ApiDefinitionWithBLOBs; import io.metersphere.base.domain.MockExpectConfig; import io.metersphere.base.domain.MockExpectConfigWithBLOBs; import io.metersphere.commons.constants.OperLogModule; +import io.metersphere.commons.constants.PermissionConstants; import io.metersphere.commons.utils.mock.MockApiUtils; import io.metersphere.commons.utils.mock.MockTestDataUtil; import io.metersphere.log.annotation.MsRequestLog; import io.metersphere.service.MockConfigService; import io.metersphere.service.definition.ApiDefinitionService; +import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -39,12 +41,14 @@ public class MockConfigController { private ApiDefinitionService apiDefinitionService; @PostMapping("/gen") + @RequiresPermissions(PermissionConstants.PROJECT_API_DEFINITION_READ_MOCK) public MockConfigResponse genMockConfig(@RequestBody MockConfigRequest request) { return mockConfigService.genMockConfig(request); } @PostMapping(value = "/update/form", consumes = {"multipart/form-data"}) @MsRequestLog(module = OperLogModule.API_DEFINITION) + @RequiresPermissions(PermissionConstants.PROJECT_API_DEFINITION_READ_MOCK) public MockExpectConfig updateMockExpectConfig(@RequestPart("request") MockExpectConfigRequest request, @RequestPart(value = "files", required = false) List bodyFiles) { return mockConfigService.updateMockExpectConfig(request, bodyFiles); } diff --git a/api-test/backend/src/main/java/io/metersphere/controller/scenario/ApiScenarioController.java b/api-test/backend/src/main/java/io/metersphere/controller/scenario/ApiScenarioController.java index bdbad2b9e3..9ecd316493 100644 --- a/api-test/backend/src/main/java/io/metersphere/controller/scenario/ApiScenarioController.java +++ b/api-test/backend/src/main/java/io/metersphere/controller/scenario/ApiScenarioController.java @@ -223,7 +223,7 @@ public class ApiScenarioController { } @PostMapping(value = "/run/debug") - @RequiresPermissions(PermissionConstants.PROJECT_API_SCENARIO_READ_DEBUG) + @RequiresPermissions(value = {PermissionConstants.PROJECT_API_SCENARIO_READ_DEBUG, PermissionConstants.PROJECT_API_SCENARIO_READ_RUN}, logical = Logical.OR) @MsAuditLog(module = OperLogModule.API_AUTOMATION, type = OperLogConstants.DEBUG, title = "#request.scenarioName", sourceId = "#request.scenarioId", project = "#request.projectId") public String runDebug(@RequestPart("request") RunDefinitionRequest request, @RequestPart(value = "bodyFiles", required = false) List bodyFiles, @RequestPart(value = "scenarioFiles", required = false) List scenarioFiles) { try { @@ -283,7 +283,7 @@ public class ApiScenarioController { } @PostMapping("/batch/copy") - @RequiresPermissions(value = {PermissionConstants.PROJECT_API_SCENARIO_READ_CREATE, PermissionConstants.PROJECT_API_SCENARIO_READ_COPY}, logical = Logical.OR) + @RequiresPermissions(value = {PermissionConstants.PROJECT_API_SCENARIO_READ_CREATE, PermissionConstants.PROJECT_API_SCENARIO_READ_BATCH_COPY}, logical = Logical.OR) @MsAuditLog(module = OperLogModule.API_AUTOMATION, type = OperLogConstants.BATCH_ADD, beforeEvent = "#msClass.getLogDetails(#request.ids)", content = "#msClass.getLogDetails(#request.ids)", msClass = ApiScenarioService.class) public void batchCopy(@RequestBody ApiScenarioBatchRequest request) { apiAutomationService.batchCopy(request); @@ -386,7 +386,7 @@ public class ApiScenarioController { } @PostMapping(value = "/export/jmx") - @RequiresPermissions(PermissionConstants.PROJECT_API_SCENARIO_READ_EXPORT_SCENARIO) + @RequiresPermissions(value = {PermissionConstants.PROJECT_API_SCENARIO_READ_EXPORT_SCENARIO, PermissionConstants.PROJECT_API_SCENARIO_READ_CREATE_PERFORMANCE , PermissionConstants.PROJECT_API_SCENARIO_READ_CREATE_PERFORMANCE_BATCH}, logical = Logical.OR) @MsAuditLog(module = OperLogModule.API_AUTOMATION, type = OperLogConstants.EXPORT, sourceId = "#request.id", title = "#request.name", project = "#request.projectId") public ScenarioToPerformanceInfoDTO exportJmx(@RequestBody ApiScenarioBatchRequest request) { return apiAutomationService.exportJmx(request); diff --git a/api-test/frontend/src/business/automation/scenario/ApiScenarioList.vue b/api-test/frontend/src/business/automation/scenario/ApiScenarioList.vue index 1d3764021c..e882573186 100644 --- a/api-test/frontend/src/business/automation/scenario/ApiScenarioList.vue +++ b/api-test/frontend/src/business/automation/scenario/ApiScenarioList.vue @@ -678,9 +678,6 @@ export default { name: this.$t('api_test.create_performance_test_batch'), handleClick: this.batchCreatePerformance, permissions: ['PROJECT_API_SCENARIO:READ+CREATE_PERFORMANCE_BATCH'], - isDisable() { - return !hasPermission('PROJECT_PERFORMANCE_TEST:READ+CREATE'); - }, }, ], typeArr: [ @@ -1597,6 +1594,10 @@ export default { this.$emit('selection', selection); }, batchCreatePerformance() { + if (!hasPermission('PROJECT_PERFORMANCE_TEST:READ+CREATE')) { + this.$warning(this.$t('api_test.create_performance_test_tips')); + return; + } this.$alert(this.$t('api_test.definition.request.batch_to_performance_confirm') + ' ?', '', { confirmButtonText: this.$t('commons.confirm'), callback: (action) => { diff --git a/api-test/frontend/src/business/automation/scenario/EditApiScenario.vue b/api-test/frontend/src/business/automation/scenario/EditApiScenario.vue index 21d5bc423e..74683ef709 100644 --- a/api-test/frontend/src/business/automation/scenario/EditApiScenario.vue +++ b/api-test/frontend/src/business/automation/scenario/EditApiScenario.vue @@ -153,9 +153,6 @@ size="mini" @command="handleCommand" v-permission="[ - 'PROJECT_API_SCENARIO:READ+EDIT', - 'PROJECT_API_SCENARIO:READ+CREATE', - 'PROJECT_API_SCENARIO:READ+COPY', 'PROJECT_API_SCENARIO:READ+DEBUG', 'PROJECT_API_SCENARIO:READ+RUN' ]"> diff --git a/api-test/frontend/src/business/definition/components/EditCompleteContainer.vue b/api-test/frontend/src/business/definition/components/EditCompleteContainer.vue index cbbe3512a6..7fcec33e97 100644 --- a/api-test/frontend/src/business/definition/components/EditCompleteContainer.vue +++ b/api-test/frontend/src/business/definition/components/EditCompleteContainer.vue @@ -30,6 +30,7 @@ :class="{ active: showMock }" @click="changeTab('mock')" size="small" + v-permission="['PROJECT_API_DEFINITION:READ+MOCK']" v-if="currentProtocol === 'HTTP' || currentProtocol === 'TCP'"> MOCK diff --git a/api-test/frontend/src/business/definition/components/complete/EditCompleteDubboApi.vue b/api-test/frontend/src/business/definition/components/complete/EditCompleteDubboApi.vue index 68d151fc57..5e336b0d40 100644 --- a/api-test/frontend/src/business/definition/components/complete/EditCompleteDubboApi.vue +++ b/api-test/frontend/src/business/definition/components/complete/EditCompleteDubboApi.vue @@ -46,7 +46,12 @@ @checkout="checkout" @create="create" @del="del"/> - {{ $t('commons.save') }} + {{ $t('commons.save') }} diff --git a/api-test/frontend/src/business/definition/components/complete/EditCompleteHTTPApi.vue b/api-test/frontend/src/business/definition/components/complete/EditCompleteHTTPApi.vue index 6f5fc98dc9..25e9ce62a8 100644 --- a/api-test/frontend/src/business/definition/components/complete/EditCompleteHTTPApi.vue +++ b/api-test/frontend/src/business/definition/components/complete/EditCompleteHTTPApi.vue @@ -52,7 +52,11 @@ @click="saveApi" v-prevent-re-click title="ctrl + s" - v-permission="['PROJECT_API_DEFINITION:READ+EDIT_API']" + v-permission="[ + 'PROJECT_API_DEFINITION:READ+EDIT_API', + 'PROJECT_API_DEFINITION:READ+CREATE_API', + 'PROJECT_API_DEFINITION:READ+COPY_API' + ]" >{{ $t('commons.save') }} - {{ $t('commons.save') }} + {{ $t('commons.save') }} diff --git a/api-test/frontend/src/business/definition/components/complete/EditCompleteTCPApi.vue b/api-test/frontend/src/business/definition/components/complete/EditCompleteTCPApi.vue index edd586f309..037329956e 100644 --- a/api-test/frontend/src/business/definition/components/complete/EditCompleteTCPApi.vue +++ b/api-test/frontend/src/business/definition/components/complete/EditCompleteTCPApi.vue @@ -46,7 +46,12 @@ @create="create" @setLatest="setLatest" @del="del" /> - {{ $t('commons.save') }} + {{ $t('commons.save') }} diff --git a/api-test/frontend/src/business/definition/components/runtest/RunTestHTTPPage.vue b/api-test/frontend/src/business/definition/components/runtest/RunTestHTTPPage.vue index a3f0a0ef37..4587ac4081 100644 --- a/api-test/frontend/src/business/definition/components/runtest/RunTestHTTPPage.vue +++ b/api-test/frontend/src/business/definition/components/runtest/RunTestHTTPPage.vue @@ -35,19 +35,20 @@ @command="handleCommand" size="small" v-if="!runLoading" - v-permission="['PROJECT_API_DEFINITION:READ+EDIT_API', 'PROJECT_API_DEFINITION:READ+CREATE_CASE']"> + v-permission="['PROJECT_API_DEFINITION:READ+EDIT_API', 'PROJECT_API_DEFINITION:READ+CREATE_CASE', 'PROJECT_API_DEFINITION:READ+RUN']"> {{ $t('commons.test') }} {{ $t('api_test.definition.request.load_case') }} - {{ $t('api_test.definition.request.save_as_case') }} - {{ $t('api_test.definition.request.update_api') }} - {{ $t('api_test.definition.request.save_as') }} + {{ $t('api_test.definition.request.save_as') }} diff --git a/framework/sdk-parent/sdk/src/main/java/io/metersphere/commons/constants/PermissionConstants.java b/framework/sdk-parent/sdk/src/main/java/io/metersphere/commons/constants/PermissionConstants.java index 20cc6ac063..003fdc20f0 100644 --- a/framework/sdk-parent/sdk/src/main/java/io/metersphere/commons/constants/PermissionConstants.java +++ b/framework/sdk-parent/sdk/src/main/java/io/metersphere/commons/constants/PermissionConstants.java @@ -155,6 +155,7 @@ public class PermissionConstants { public static final String PROJECT_API_SCENARIO_READ_EDIT = "PROJECT_API_SCENARIO:READ+EDIT"; public static final String PROJECT_API_SCENARIO_READ_DELETE = "PROJECT_API_SCENARIO:READ+DELETE"; public static final String PROJECT_API_SCENARIO_READ_COPY = "PROJECT_API_SCENARIO:READ+COPY"; + public static final String PROJECT_API_SCENARIO_READ_BATCH_COPY = "PROJECT_API_SCENARIO:READ+BATCH_COPY"; public static final String PROJECT_API_SCENARIO_READ_RUN = "PROJECT_API_SCENARIO:READ+RUN"; public static final String PROJECT_API_SCENARIO_READ_DEBUG = "PROJECT_API_SCENARIO:READ+DEBUG"; public static final String PROJECT_API_SCENARIO_READ_SCHEDULE = "PROJECT_API_SCENARIO:READ+SCHEDULE";