From 6dfcaada9cc1684c314387456920515714ef4e4c Mon Sep 17 00:00:00 2001 From: Davis Plumlee <56367316+dplumlee@users.noreply.github.com> Date: Wed, 13 Nov 2024 17:11:48 -0500 Subject: [PATCH] [Security Solution] Allows editing and exporting prebuilt rules from the Rule Management and Rule Details pages (#198202) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Resolves: https://github.com/elastic/kibana/issues/180171** **Resolves: https://github.com/elastic/kibana/issues/180176** **Resolves: https://github.com/elastic/kibana/issues/180173** ## Summary > [!NOTE] > Feature is behind the `prebuiltRulesCustomizationEnabled` feature flag. Adds logic to allow users to edit and export prebuilt rules from both the Rule management page and Rule details page via the bulk action menu and the singular overflow menu ### Acceptance criteria - [x] Feature is hidden behind prebuiltRulesCustomizationEnabled feature flag - [x] Modified components still work as expected when feature flag is off - [x] Bulk actions are able to performed on all rule types from Rule management page bulk actions menu - [x] Editing - [x] Index patterns - [x] Tags - [x] Highlighted fields - [x] Schedule - [x] Export - [x] Singular rule actions are able to be performed on all rule types from rule management page overflow column - [x] Export - [x] Singular rule actions are able to be performed on all rule types from rule details page - [x] Export ### Screenshots *** ### Rule management table overflow menu #### Before **Export button is disabled for prebuilt rules** ![Screenshot 2024-11-07 at 7 38 12 PM](https://github.com/user-attachments/assets/13f8cd87-a9e5-486c-ab0f-d206de8bab4b) #### After **Export button is enabled for all rule types** ![Screenshot 2024-11-07 at 7 34 27 PM](https://github.com/user-attachments/assets/4b3d9364-02d5-406a-9f8a-c9ad8fed8486) ### Rule details page overflow menu #### Before **Export button is disabled for prebuilt rules** ![Screenshot 2024-11-07 at 7 37 40 PM](https://github.com/user-attachments/assets/621b56e3-1f47-49db-aedb-fd05a3b75007) #### After **Export button is enabled for all rule types** ![Screenshot 2024-11-07 at 7 34 38 PM](https://github.com/user-attachments/assets/d533f288-4393-4acf-ba88-91c32ab32955) --------- Co-authored-by: Elastic Machine (cherry picked from commit 02e4edc458749ca286c2b03eb71c248c7ef5b335) --- .../rules_table/use_rules_table_actions.tsx | 4 ++- .../rules/rule_actions_overflow/index.tsx | 26 ++++++++++++------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/use_rules_table_actions.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/use_rules_table_actions.tsx index f3d0930d7c1fe..a4c85391a8063 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/use_rules_table_actions.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/use_rules_table_actions.tsx @@ -25,6 +25,7 @@ import { useDownloadExportedRules } from '../../../rule_management/logic/bulk_ac import { useHasActionsPrivileges } from './use_has_actions_privileges'; import type { TimeRange } from '../../../rule_gaps/types'; import { useScheduleRuleRun } from '../../../rule_gaps/logic/use_schedule_rule_run'; +import { useIsPrebuiltRulesCustomizationEnabled } from '../../../rule_management/hooks/use_is_prebuilt_rules_customization_enabled'; import { ManualRuleRunEventTypes } from '../../../../common/lib/telemetry'; export const useRulesTableActions = ({ @@ -46,6 +47,7 @@ export const useRulesTableActions = ({ const { bulkExport } = useBulkExport(); const downloadExportedRules = useDownloadExportedRules(); const { scheduleRuleRun } = useScheduleRuleRun(); + const isPrebuiltRulesCustomizationEnabled = useIsPrebuiltRulesCustomizationEnabled(); return [ { @@ -116,7 +118,7 @@ export const useRulesTableActions = ({ await downloadExportedRules(response); } }, - enabled: (rule: Rule) => !rule.immutable, + enabled: (rule: Rule) => isPrebuiltRulesCustomizationEnabled || !rule.immutable, }, { type: 'icon', diff --git a/x-pack/plugins/security_solution/public/detections/components/rules/rule_actions_overflow/index.tsx b/x-pack/plugins/security_solution/public/detections/components/rules/rule_actions_overflow/index.tsx index a786b95979d43..f34fca18ca6e3 100644 --- a/x-pack/plugins/security_solution/public/detections/components/rules/rule_actions_overflow/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/rules/rule_actions_overflow/index.tsx @@ -14,6 +14,7 @@ import { } from '@elastic/eui'; import React, { useCallback, useMemo } from 'react'; import styled from 'styled-components'; +import { useIsPrebuiltRulesCustomizationEnabled } from '../../../../detection_engine/rule_management/hooks/use_is_prebuilt_rules_customization_enabled'; import { useScheduleRuleRun } from '../../../../detection_engine/rule_gaps/logic/use_schedule_rule_run'; import type { TimeRange } from '../../../../detection_engine/rule_gaps/types'; import { APP_UI_ID, SecurityPageName } from '../../../../../common/constants'; @@ -72,6 +73,7 @@ const RuleActionsOverflowComponent = ({ application: { navigateToApp }, telemetry, } = useKibana().services; + const isPrebuiltRulesCustomizationEnabled = useIsPrebuiltRulesCustomizationEnabled(); const { startTransaction } = useStartTransaction(); const { executeBulkAction } = useExecuteBulkAction({ suppressSuccessToast: true }); const { bulkExport } = useBulkExport(); @@ -137,7 +139,10 @@ const RuleActionsOverflowComponent = ({ { startTransaction({ name: SINGLE_RULE_ACTIONS.EXPORT }); @@ -203,21 +208,22 @@ const RuleActionsOverflowComponent = ({ ] : [], [ - bulkExport, + rule, canDuplicateRuleWithActions, + userHasPermissions, + isPrebuiltRulesCustomizationEnabled, + startTransaction, closePopover, + showBulkDuplicateExceptionsConfirmation, executeBulkAction, navigateToApp, - onRuleDeletedCallback, - rule, - showBulkDuplicateExceptionsConfirmation, - showManualRuleRunConfirmation, - startTransaction, - userHasPermissions, + bulkExport, downloadExportedRules, - confirmDeletion, - scheduleRuleRun, + showManualRuleRunConfirmation, telemetry, + scheduleRuleRun, + confirmDeletion, + onRuleDeletedCallback, ] );