Skip to content

Commit

Permalink
[Security Solution][Investigations] - Add check for changing alert st…
Browse files Browse the repository at this point in the history
…atus from bulk options (elastic#170584)

## Summary
Addresses elastic#169684

This PR is a re-do of: elastic#169723
(With cypress tests currently skipped until proper role is available).
The alert privileges needs to be added for the alert table as it wasn't
added when the migration took place. An example of the privileges
elsewhere is below:

https://github.com/elastic/kibana/blob/75e9d46b4b3a6ff5be4ffc324ba282cea0faea0c/x-pack/plugins/security_solution/public/detections/components/alerts_table/timeline_actions/use_alerts_actions.tsx#L33

Fix:

https://github.com/elastic/kibana/assets/17211684/7b354906-9b96-4ba8-b30f-4080cf7e7c2f

---------

Co-authored-by: Kibana Machine <[email protected]>
(cherry picked from commit 3651571)

# Conflicts:
#	x-pack/test/security_solution_cypress/cypress/e2e/detection_response/detection_alerts/alert_status.cy.ts
  • Loading branch information
michaelolo24 committed Nov 7, 2023
1 parent 4c0746f commit d1d6852
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ import { useUiSetting$ } from '../../../lib/kibana';

jest.mock('./use_set_alert_tags');
jest.mock('../../../lib/kibana');
jest.mock(
'../../../../detections/containers/detection_engine/alerts/use_alerts_privileges',
() => ({
useAlertsPrivileges: jest.fn().mockReturnValue({ hasIndexWrite: true }),
})
);

const defaultProps: UseBulkAlertTagsItemsProps = {
refetch: () => {},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import { EuiFlexGroup, EuiIconTip, EuiFlexItem } from '@elastic/eui';
import type { RenderContentPanelProps } from '@kbn/triggers-actions-ui-plugin/public/types';
import React, { useCallback, useMemo } from 'react';
import { useAlertsPrivileges } from '../../../../detections/containers/detection_engine/alerts/use_alerts_privileges';
import { BulkAlertTagsPanel } from './alert_bulk_tags';
import * as i18n from './translations';
import { useSetAlertTags } from './use_set_alert_tags';
Expand All @@ -24,6 +25,7 @@ export interface UseBulkAlertTagsPanel {
}

export const useBulkAlertTagsItems = ({ refetch }: UseBulkAlertTagsItemsProps) => {
const { hasIndexWrite } = useAlertsPrivileges();
const setAlertTags = useSetAlertTags();
const handleOnAlertTagsSubmit = useCallback(
async (tags, ids, onSuccess, setIsLoading) => {
Expand All @@ -34,16 +36,22 @@ export const useBulkAlertTagsItems = ({ refetch }: UseBulkAlertTagsItemsProps) =
[setAlertTags]
);

const alertTagsItems = [
{
key: 'manage-alert-tags',
'data-test-subj': 'alert-tags-context-menu-item',
name: i18n.ALERT_TAGS_CONTEXT_MENU_ITEM_TITLE,
panel: 1,
label: i18n.ALERT_TAGS_CONTEXT_MENU_ITEM_TITLE,
disableOnQuery: true,
},
];
const alertTagsItems = useMemo(
() =>
hasIndexWrite
? [
{
key: 'manage-alert-tags',
'data-test-subj': 'alert-tags-context-menu-item',
name: i18n.ALERT_TAGS_CONTEXT_MENU_ITEM_TITLE,
panel: 1,
label: i18n.ALERT_TAGS_CONTEXT_MENU_ITEM_TITLE,
disableOnQuery: true,
},
]
: [],
[hasIndexWrite]
);

const TitleContent = useMemo(
() => (
Expand Down Expand Up @@ -79,15 +87,18 @@ export const useBulkAlertTagsItems = ({ refetch }: UseBulkAlertTagsItemsProps) =
);

const alertTagsPanels: UseBulkAlertTagsPanel[] = useMemo(
() => [
{
id: 1,
title: TitleContent,
'data-test-subj': 'alert-tags-context-menu-panel',
renderContent,
},
],
[TitleContent, renderContent]
() =>
hasIndexWrite
? [
{
id: 1,
title: TitleContent,
'data-test-subj': 'alert-tags-context-menu-panel',
renderContent,
},
]
: [],
[TitleContent, hasIndexWrite, renderContent]
);

return {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import type { AlertWorkflowStatus } from '../../../common/types';
import { FILTER_CLOSED, FILTER_OPEN, FILTER_ACKNOWLEDGED } from '../../../../common/types';
import * as i18n from '../translations';
import { buildTimeRangeFilter } from '../../components/alerts_table/helpers';
import { useAlertsPrivileges } from '../../containers/detection_engine/alerts/use_alerts_privileges';

interface UseBulkAlertActionItemsArgs {
/* Table ID for which this hook is being used */
Expand All @@ -41,6 +42,7 @@ export const useBulkAlertActionItems = ({
to,
refetch: refetchProp,
}: UseBulkAlertActionItemsArgs) => {
const { hasIndexWrite } = useAlertsPrivileges();
const { startTransaction } = useStartTransaction();

const { addSuccess, addError, addWarning } = useAppToasts();
Expand Down Expand Up @@ -172,7 +174,9 @@ export const useBulkAlertActionItems = ({
[getOnAction]
);

return [FILTER_OPEN, FILTER_CLOSED, FILTER_ACKNOWLEDGED].map((status) =>
getUpdateAlertStatusAction(status as AlertWorkflowStatus)
);
return hasIndexWrite
? [FILTER_OPEN, FILTER_CLOSED, FILTER_ACKNOWLEDGED].map((status) =>
getUpdateAlertStatusAction(status as AlertWorkflowStatus)
)
: [];
};

0 comments on commit d1d6852

Please sign in to comment.