diff --git a/ee/app/assets/javascripts/security_orchestration/components/policies/policies_list.vue b/ee/app/assets/javascripts/security_orchestration/components/policies/policies_list.vue index 673dd35a936f5416dbadca656b460f6a802bcae4..d834d435e6c27409e8e922540b5871443d958140 100644 --- a/ee/app/assets/javascripts/security_orchestration/components/policies/policies_list.vue +++ b/ee/app/assets/javascripts/security_orchestration/components/policies/policies_list.vue @@ -67,7 +67,13 @@ export default { directives: { GlTooltip: GlTooltipDirective, }, - inject: ['documentationPath', 'namespacePath', 'namespaceType', 'newPolicyPath'], + inject: [ + 'documentationPath', + 'namespacePath', + 'namespaceType', + 'newPolicyPath', + 'disableScanPolicyUpdate', + ], props: { hasPolicyProject: { type: Boolean, @@ -355,6 +361,7 @@ export default { :policy="selectedPolicy" :policy-type="policyType" :edit-policy-path="editPolicyPath" + :disable-scan-policy-update="disableScanPolicyUpdate" data-testid="policyDrawer" @close="deselectPolicy" /> diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_drawer/policy_drawer.vue b/ee/app/assets/javascripts/security_orchestration/components/policy_drawer/policy_drawer.vue index 6878438314c6306833457396b71f429b2de7691f..baa24979abd2e7490a68e49632e4719c0a218fd3 100644 --- a/ee/app/assets/javascripts/security_orchestration/components/policy_drawer/policy_drawer.vue +++ b/ee/app/assets/javascripts/security_orchestration/components/policy_drawer/policy_drawer.vue @@ -59,6 +59,11 @@ export default { required: false, default: '', }, + disableScanPolicyUpdate: { + type: Boolean, + required: false, + default: false, + }, }, computed: { isPolicyInherited() { @@ -105,7 +110,7 @@ export default { /> </template> <template v-if="policy" #header> - <span ref="editButton" class="gl-display-inline-block"> + <span v-if="!disableScanPolicyUpdate" ref="editButton" class="gl-display-inline-block"> <gl-button class="gl-mt-5" data-testid="edit-button" diff --git a/ee/spec/frontend/security_orchestration/components/policies/policies_list_spec.js b/ee/spec/frontend/security_orchestration/components/policies/policies_list_spec.js index 68d9255dc72bbdec8b27e09bd460b83258907ad2..96dc536004c63eb3f7db2829d9dd3a9078cd0d9c 100644 --- a/ee/spec/frontend/security_orchestration/components/policies/policies_list_spec.js +++ b/ee/spec/frontend/security_orchestration/components/policies/policies_list_spec.js @@ -67,6 +67,7 @@ describe('PoliciesList component', () => { namespacePath, namespaceType: NAMESPACE_TYPES.PROJECT, newPolicyPath: `${namespacePath}/-/security/policies/new`, + disableScanPolicyUpdate: false, ...provide, }, apolloProvider: createMockApollo([ diff --git a/ee/spec/frontend/security_orchestration/components/policy_drawer/policy_drawer_spec.js b/ee/spec/frontend/security_orchestration/components/policy_drawer/policy_drawer_spec.js index b646b61b873c5342ab47e0b92eafd4f3436424c5..fabce95bd416504dc7e0b097675d90a316e5067e 100644 --- a/ee/spec/frontend/security_orchestration/components/policy_drawer/policy_drawer_spec.js +++ b/ee/spec/frontend/security_orchestration/components/policy_drawer/policy_drawer_spec.js @@ -73,6 +73,24 @@ describe('PolicyDrawer component', () => { }); }); + describe('based on policy permission', () => { + it.each` + disableScanPolicyUpdate | expectedResult + ${true} | ${false} + ${false} | ${true} + `('renders edit button', ({ disableScanPolicyUpdate, expectedResult }) => { + factory({ + mountFn: mountExtended, + propsData: { + policy: mockProjectScanExecutionPolicy, + disableScanPolicyUpdate, + }, + }); + + expect(findEditButton().exists()).toBe(expectedResult); + }); + }); + describe.each` policyType | mock | finder ${POLICY_TYPE_COMPONENT_OPTIONS.scanExecution.value} | ${mockProjectScanExecutionPolicy} | ${findScanExecutionPolicy}