From da44cf71d0cfd6742fd2d7fa76707e82965f0903 Mon Sep 17 00:00:00 2001 From: so_hell Date: Sat, 8 Jul 2023 22:10:59 +0530 Subject: [PATCH 1/2] fixed: The settings menu displays items that the user does not have permission to #17179 --- .../admin/src/hooks/useSettingsMenu/index.js | 31 ++++++++++--------- .../components/SettingsNav/index.js | 30 +++++++++++------- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/packages/core/admin/admin/src/hooks/useSettingsMenu/index.js b/packages/core/admin/admin/src/hooks/useSettingsMenu/index.js index 52f9fe4e84..46f5766688 100644 --- a/packages/core/admin/admin/src/hooks/useSettingsMenu/index.js +++ b/packages/core/admin/admin/src/hooks/useSettingsMenu/index.js @@ -24,20 +24,11 @@ const useSettingsMenu = () => { async () => (await import('../../../../ee/admin/hooks/useSettingsMenu/constants')).LINKS_EE, { combine(ceLinks, eeLinks) { - function addPermissions(link) { - if (!link.id) { - throw new Error('The settings menu item must have an id attribute.'); - } - - return { - ...link, - permissions: permissions.settings?.[link.id]?.main, - }; - } + return { - admin: [...eeLinks.admin, ...ceLinks.admin].map(addPermissions), - global: [...ceLinks.global, ...eeLinks.global].map(addPermissions), + admin: [...eeLinks.admin, ...ceLinks.admin], + global: [...ceLinks.global, ...eeLinks.global], }; }, defaultValue: { @@ -47,6 +38,17 @@ const useSettingsMenu = () => { } ); + function addPermissions(link) { + if (!link.id) { + throw new Error('The settings menu item must have an id attribute.'); + } + + return { + ...link, + permissions: permissions.settings?.[link.id]?.main, + }; + } + useEffect(() => { const getData = async () => { const buildMenuPermissions = (sections) => @@ -89,7 +91,7 @@ const useSettingsMenu = () => { const sections = formatLinks([ { ...settings.global, - links: sortLinks([...settings.global.links, ...globalLinks]).map((link) => ({ + links: sortLinks([...settings.global.links, ...globalLinks.map(addPermissions)]).map((link) => ({ ...link, hasNotification: link.id === '000-application-infos' && shouldUpdateStrapi, })), @@ -97,12 +99,13 @@ const useSettingsMenu = () => { { id: 'permissions', intlLabel: { id: 'Settings.permissions', defaultMessage: 'Administration Panel' }, - links: adminLinks, + links: adminLinks.map(addPermissions), }, ...Object.values(otherSections), ]); getData(); + // eslint-disable-next-line react-hooks/exhaustive-deps }, [adminLinks, globalLinks, userPermissions, settings, shouldUpdateStrapi]); return { isLoading, menu }; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/index.js index 1ceea2a1ad..c7f3e5ffef 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/index.js @@ -50,17 +50,25 @@ const SettingsNav = ({ menu }) => { {sections.map((section) => ( - {section.links.map((link) => ( - handleClickOnLink(link.to)} - key={link.id} - > - {formatMessage(link.intlLabel)} - - ))} + {section.links.map((link) => { + const { isDisplayed } = link; + + if (isDisplayed) { + return ( + handleClickOnLink(link.to)} + key={link.id} + > + {formatMessage(link.intlLabel)} + + ); + } + + return null; + })} ))} From 67f900e6c1dffe2b4c67c2284b5052bffe5b157c Mon Sep 17 00:00:00 2001 From: so_hell Date: Mon, 10 Jul 2023 14:10:44 +0530 Subject: [PATCH 2/2] =?UTF-8?q?fixed:=20fixed:=20The=20settings=20menu=20d?= =?UTF-8?q?isplays=20items=20that=20the=20user=20does=20not=20have=20p?= =?UTF-8?q?=E2=80=A6=20#17237?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/src/hooks/useSettingsMenu/index.js | 49 ++++++++++++------- .../components/SettingsNav/index.js | 28 +++++------ 2 files changed, 41 insertions(+), 36 deletions(-) diff --git a/packages/core/admin/admin/src/hooks/useSettingsMenu/index.js b/packages/core/admin/admin/src/hooks/useSettingsMenu/index.js index 46f5766688..5ede3ae437 100644 --- a/packages/core/admin/admin/src/hooks/useSettingsMenu/index.js +++ b/packages/core/admin/admin/src/hooks/useSettingsMenu/index.js @@ -1,4 +1,4 @@ -import { useState, useEffect } from 'react'; +import { useState, useEffect, useCallback } from 'react'; import { hasPermissions, useRBACProvider, useStrapiApp, useAppInfo } from '@strapi/helper-plugin'; import { useSelector } from 'react-redux'; @@ -19,13 +19,12 @@ const useSettingsMenu = () => { const { shouldUpdateStrapi } = useAppInfo(); const { settings } = useStrapiApp(); const permissions = useSelector(selectAdminPermissions); + const { global: globalLinks, admin: adminLinks } = useEnterprise( LINKS_CE, async () => (await import('../../../../ee/admin/hooks/useSettingsMenu/constants')).LINKS_EE, { combine(ceLinks, eeLinks) { - - return { admin: [...eeLinks.admin, ...ceLinks.admin], global: [...ceLinks.global, ...eeLinks.global], @@ -38,16 +37,19 @@ const useSettingsMenu = () => { } ); - function addPermissions(link) { - if (!link.id) { - throw new Error('The settings menu item must have an id attribute.'); - } + const addPermissions = useCallback( + (link) => { + if (!link.id) { + throw new Error('The settings menu item must have an id attribute.'); + } - return { - ...link, - permissions: permissions.settings?.[link.id]?.main, - }; - } + return { + ...link, + permissions: permissions.settings?.[link.id]?.main, + }; + }, + [permissions.settings] + ); useEffect(() => { const getData = async () => { @@ -88,13 +90,16 @@ const useSettingsMenu = () => { }; const { global, ...otherSections } = settings; + const sections = formatLinks([ { ...settings.global, - links: sortLinks([...settings.global.links, ...globalLinks.map(addPermissions)]).map((link) => ({ - ...link, - hasNotification: link.id === '000-application-infos' && shouldUpdateStrapi, - })), + links: sortLinks([...settings.global.links, ...globalLinks.map(addPermissions)]).map( + (link) => ({ + ...link, + hasNotification: link.id === '000-application-infos' && shouldUpdateStrapi, + }) + ), }, { id: 'permissions', @@ -105,10 +110,16 @@ const useSettingsMenu = () => { ]); getData(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [adminLinks, globalLinks, userPermissions, settings, shouldUpdateStrapi]); + }, [adminLinks, globalLinks, userPermissions, settings, shouldUpdateStrapi, addPermissions]); - return { isLoading, menu }; + const filterMenu = (menuItem) => { + return { + ...menuItem, + links: menuItem.links.filter((link) => link.isDisplayed), + }; + }; + + return { isLoading, menu: menu.map(filterMenu) }; }; export default useSettingsMenu; diff --git a/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/index.js b/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/index.js index c7f3e5ffef..4c86686c7a 100644 --- a/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/index.js +++ b/packages/core/admin/admin/src/pages/SettingsPage/components/SettingsNav/index.js @@ -51,23 +51,17 @@ const SettingsNav = ({ menu }) => { {sections.map((section) => ( {section.links.map((link) => { - const { isDisplayed } = link; - - if (isDisplayed) { - return ( - handleClickOnLink(link.to)} - key={link.id} - > - {formatMessage(link.intlLabel)} - - ); - } - - return null; + return ( + handleClickOnLink(link.to)} + key={link.id} + > + {formatMessage(link.intlLabel)} + + ); })} ))}