From 017dad8e8e76b2e43cb693f188982750b72f5486 Mon Sep 17 00:00:00 2001 From: Elena Shostak Date: Tue, 31 Dec 2024 11:41:51 +0100 Subject: [PATCH] Fixes --- .../privilege_summary_expanded_row.tsx | 156 ++++++++++-------- .../privilege_summary_table.test.tsx | 14 +- 2 files changed, 90 insertions(+), 80 deletions(-) diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_expanded_row.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_expanded_row.tsx index 901f8dfd7483d..a48352c839598 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_expanded_row.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_expanded_row.tsx @@ -6,7 +6,7 @@ */ import { EuiFlexGroup, EuiFlexItem, EuiIconTip, EuiText } from '@elastic/eui'; -import React, { useCallback } from 'react'; +import React, { useCallback, useMemo } from 'react'; import { i18n } from '@kbn/i18n'; import type { @@ -27,8 +27,83 @@ interface Props { } export const PrivilegeSummaryExpandedRow = (props: Props) => { - const allSpacesEffectivePrivileges = props.effectiveFeaturePrivileges.find(([spaces]) => - spaces.includes(ALL_SPACES_ID) + const allSpacesEffectivePrivileges = useMemo( + () => props.effectiveFeaturePrivileges.find(([spaces]) => spaces.includes(ALL_SPACES_ID)), + [props.effectiveFeaturePrivileges] + ); + + const renderIndependentPrivilegeGroup = useCallback( + ( + effectiveSubFeaturePrivileges: string[], + privilegeGroup: SubFeaturePrivilegeGroup, + index: number + ) => { + return ( +
+ {privilegeGroup.privileges.map((privilege: SubFeaturePrivilege) => { + const isGranted = effectiveSubFeaturePrivileges.includes(privilege.id); + return ( + + + + + + + {privilege.name} + + + + ); + })} +
+ ); + }, + [] + ); + + const renderMutuallyExclusivePrivilegeGroup = useCallback( + ( + effectiveSubFeaturePrivileges: string[], + privilegeGroup: SubFeaturePrivilegeGroup, + index: number, + isDisabledDueToSpaceSelection: boolean + ) => { + const firstSelectedPrivilege = !isDisabledDueToSpaceSelection + ? privilegeGroup.privileges.find((p) => effectiveSubFeaturePrivileges.includes(p.id))?.name + : null; + + return ( + + + + + + + {firstSelectedPrivilege ?? 'None'} + + + + ); + }, + [] ); const renderPrivilegeGroup = useCallback( @@ -58,13 +133,16 @@ export const PrivilegeSummaryExpandedRow = (props: Props) => { } }; }, - [] + [renderIndependentPrivilegeGroup, renderMutuallyExclusivePrivilegeGroup] ); const getEffectiveFeaturePrivileges = useCallback( (subFeature: SecuredSubFeature) => { return props.effectiveFeaturePrivileges.map((entry, index) => { - const [spaces, privs] = allSpacesEffectivePrivileges ?? entry; + const [spaces, privs] = + subFeature.requireAllSpaces && allSpacesEffectivePrivileges + ? allSpacesEffectivePrivileges + : entry; return ( @@ -81,74 +159,6 @@ export const PrivilegeSummaryExpandedRow = (props: Props) => { [props.effectiveFeaturePrivileges, allSpacesEffectivePrivileges, renderPrivilegeGroup] ); - function renderIndependentPrivilegeGroup( - effectiveSubFeaturePrivileges: string[], - privilegeGroup: SubFeaturePrivilegeGroup, - index: number - ) { - return ( -
- {privilegeGroup.privileges.map((privilege: SubFeaturePrivilege) => { - const isGranted = effectiveSubFeaturePrivileges.includes(privilege.id); - return ( - - - - - - - {privilege.name} - - - - ); - })} -
- ); - } - - function renderMutuallyExclusivePrivilegeGroup( - effectiveSubFeaturePrivileges: string[], - privilegeGroup: SubFeaturePrivilegeGroup, - index: number, - isDisabledDueToSpaceSelection: boolean - ) { - const firstSelectedPrivilege = !isDisabledDueToSpaceSelection - ? privilegeGroup.privileges.find((p) => effectiveSubFeaturePrivileges.includes(p.id))?.name - : null; - - return ( - - - - - - - {firstSelectedPrivilege ?? 'None'} - - - - ); - } - return ( {props.feature.getSubFeatures().map((subFeature) => { diff --git a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_table.test.tsx b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_table.test.tsx index f9ebe836253d6..6a9f3265e9109 100644 --- a/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_table.test.tsx +++ b/x-pack/plugins/security/public/management/roles/edit_role/privileges/kibana/privilege_summary/privilege_summary_table.test.tsx @@ -611,7 +611,7 @@ describe('PrivilegeSummaryTable', () => { hasCustomizedSubFeaturePrivileges: false, primaryFeaturePrivilege: 'All', ...maybeExpectSubFeaturePrivileges(allowSubFeaturePrivileges, { - 'Cool Sub Feature': ['Cool toggle 2', 'Read'], + 'Cool Sub Feature': ['Cool toggle 1', 'Cool toggle 2', 'All'], }), }, }, @@ -735,7 +735,7 @@ describe('PrivilegeSummaryTable', () => { hasCustomizedSubFeaturePrivileges: allowSubFeaturePrivileges, primaryFeaturePrivilege: 'Read', ...maybeExpectSubFeaturePrivileges(allowSubFeaturePrivileges, { - 'Cool Sub Feature': ['Cool toggle 2', 'Read'], + 'Cool Sub Feature': ['Cool toggle 2', 'All'], }), }, }, @@ -859,7 +859,7 @@ describe('PrivilegeSummaryTable', () => { hasCustomizedSubFeaturePrivileges: allowSubFeaturePrivileges, primaryFeaturePrivilege: 'Read', ...maybeExpectSubFeaturePrivileges(allowSubFeaturePrivileges, { - 'Cool Sub Feature': ['All'], + 'Cool Sub Feature': ['Cool toggle 2', 'All'], }), }, }, @@ -985,7 +985,7 @@ describe('PrivilegeSummaryTable', () => { hasCustomizedSubFeaturePrivileges: false, primaryFeaturePrivilege: 'All', ...maybeExpectSubFeaturePrivileges(allowSubFeaturePrivileges, { - 'Cool Sub Feature': ['All'], + 'Cool Sub Feature': ['Cool toggle 1', 'Cool toggle 2', 'All'], }), }, }, @@ -1214,7 +1214,7 @@ describe('PrivilegeSummaryTable', () => { hasCustomizedSubFeaturePrivileges: allowSubFeaturePrivileges, primaryFeaturePrivilege: 'All', ...maybeExpectSubFeaturePrivileges(allowSubFeaturePrivileges, { - 'Cool Sub Feature': [], + 'Cool Sub Feature': ['Cool toggle 2'], }), }, }, @@ -1251,7 +1251,7 @@ describe('PrivilegeSummaryTable', () => { hasCustomizedSubFeaturePrivileges: allowSubFeaturePrivileges, primaryFeaturePrivilege: 'All', ...maybeExpectSubFeaturePrivileges(allowSubFeaturePrivileges, { - 'Excluded Sub Feature': [], + 'Excluded Sub Feature': ['Cool toggle 1'], }), }, }, @@ -1267,7 +1267,7 @@ describe('PrivilegeSummaryTable', () => { hasCustomizedSubFeaturePrivileges: false, primaryFeaturePrivilege: 'All', ...maybeExpectSubFeaturePrivileges(allowSubFeaturePrivileges, { - 'Cool Sub Feature': ['Cool toggle 2', 'Read'], + 'Cool Sub Feature': ['Cool toggle 1', 'Cool toggle 2', 'All'], }), }, 'space-1, space-2': {