From 6a57eea76dcb0de81f0e84e082a529104a039414 Mon Sep 17 00:00:00 2001 From: Pallavi Mishra Date: Wed, 17 Jul 2024 11:57:34 +0530 Subject: [PATCH 1/3] services in sidebar based on permissions --- studio/src/components/GlobalNav/Sidebar.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/studio/src/components/GlobalNav/Sidebar.js b/studio/src/components/GlobalNav/Sidebar.js index 04cfa7cf7..c3feb0457 100644 --- a/studio/src/components/GlobalNav/Sidebar.js +++ b/studio/src/components/GlobalNav/Sidebar.js @@ -16,6 +16,7 @@ import { } from '@ant-design/icons'; import Search from '../Search'; import degaImg from '../../assets/dega.png'; +import getUserPermission from '../../utils/getUserPermission'; const { Sider } = Layout; const { SubMenu } = Menu; @@ -100,9 +101,18 @@ function Sidebar({ permission, orgs, loading, applications, menuKey, signOut, or } if (orgs[0]?.role === 'admin') resource = resource.concat(protectedResources); + const hasPermission = (route) => { + const permissionRequirement = permissionRequirements[route.path]; + if (!permissionRequirement) return true; + + return permissionRequirement.every(({ resource, action }) => + getUserPermission({ resource, action, spaces: { selected, details } }).includes(action), + ); + }; + const getMenuItems = (children, index, title) => children.map((route, childIndex) => { - return resource.includes(route.title.toLowerCase()) ? ( + return resource.includes(route.title.toLowerCase() && hasPermission(route)) ? ( ['Events'].indexOf(route.title) !== -1 ? null : ( @@ -127,9 +137,11 @@ function Sidebar({ permission, orgs, loading, applications, menuKey, signOut, or {getMenuItems(submenuItem.children, index, submenuItem.title)} ) : ( - - {getMenuItems(submenuItem.children, index, submenuItem.title)} - + hasPermission(submenuItem) && ( + + {getMenuItems(submenuItem.children, index, submenuItem.title)} + + ) ); })} From 5a91ae269e0f5520b665fcc5ad2072182c800192 Mon Sep 17 00:00:00 2001 From: Pallavi Mishra Date: Thu, 18 Jul 2024 13:45:06 +0530 Subject: [PATCH 2/3] services in sidebar based on permissions --- studio/src/components/GlobalNav/Sidebar.js | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/studio/src/components/GlobalNav/Sidebar.js b/studio/src/components/GlobalNav/Sidebar.js index c3feb0457..de2aa83a3 100644 --- a/studio/src/components/GlobalNav/Sidebar.js +++ b/studio/src/components/GlobalNav/Sidebar.js @@ -16,7 +16,7 @@ import { } from '@ant-design/icons'; import Search from '../Search'; import degaImg from '../../assets/dega.png'; -import getUserPermission from '../../utils/getUserPermission'; + const { Sider } = Layout; const { SubMenu } = Menu; @@ -101,18 +101,13 @@ function Sidebar({ permission, orgs, loading, applications, menuKey, signOut, or } if (orgs[0]?.role === 'admin') resource = resource.concat(protectedResources); - const hasPermission = (route) => { - const permissionRequirement = permissionRequirements[route.path]; - if (!permissionRequirement) return true; - - return permissionRequirement.every(({ resource, action }) => - getUserPermission({ resource, action, spaces: { selected, details } }).includes(action), - ); - }; + const filteredServices = resource.filter((service) => { + return permission.some((perm) => perm.resource === service); + }); const getMenuItems = (children, index, title) => children.map((route, childIndex) => { - return resource.includes(route.title.toLowerCase() && hasPermission(route)) ? ( + return filteredServices.includes(route.title.toLowerCase()) ? ( ['Events'].indexOf(route.title) !== -1 ? null : ( @@ -137,13 +132,13 @@ function Sidebar({ permission, orgs, loading, applications, menuKey, signOut, or {getMenuItems(submenuItem.children, index, submenuItem.title)} ) : ( - hasPermission(submenuItem) && ( + {getMenuItems(submenuItem.children, index, submenuItem.title)} - ) + ); - })} +})} ) : null} {getMenuItems(menu.children, index, menu.title)} From 5316e805c7801f3525c98c3efd6c8412ae1ca4a8 Mon Sep 17 00:00:00 2001 From: Pallavi Mishra Date: Thu, 18 Jul 2024 18:03:55 +0530 Subject: [PATCH 3/3] services in sidebar based on permissions --- studio/src/components/GlobalNav/Sidebar.js | 51 ++++++++-------------- studio/src/layouts/basic.js | 9 +--- 2 files changed, 21 insertions(+), 39 deletions(-) diff --git a/studio/src/components/GlobalNav/Sidebar.js b/studio/src/components/GlobalNav/Sidebar.js index de2aa83a3..59da6947e 100644 --- a/studio/src/components/GlobalNav/Sidebar.js +++ b/studio/src/components/GlobalNav/Sidebar.js @@ -86,21 +86,19 @@ function Sidebar({ permission, orgs, loading, applications, menuKey, signOut, or padding: '0.25rem 0.5rem', }; - if (org_role === 'admin') { - resource = resource.concat(protectedResources); - if (!showCoreMenu) { + useEffect(() => { + if (org_role === 'admin' || orgs[0]?.role === 'admin') { + resource = resource.concat(protectedResources); setCoreMenu(true); + } else { + permission.forEach((each) => { + if (!showCoreMenu && protectedResources.includes(each.resource)) { + setCoreMenu(true); + } + resource.push(each.resource); + }); } - } else { - permission.forEach((each) => { - if (!showCoreMenu && protectedResources.includes(each.resource)) { - setCoreMenu(true); - } - resource.push(each.resource); - }); - } - - if (orgs[0]?.role === 'admin') resource = resource.concat(protectedResources); + }, [org_role, orgs, permission, showCoreMenu]); const filteredServices = resource.filter((service) => { return permission.some((perm) => perm.resource === service); }); @@ -124,27 +122,16 @@ function Sidebar({ permission, orgs, loading, applications, menuKey, signOut, or title={menu.title} icon={} > - {menu.submenu && menu.submenu.length > 0 ? ( - <> - {menu.submenu.map((submenuItem, index) => { - return orgs[0]?.role === 'admin' ? ( - - {getMenuItems(submenuItem.children, index, submenuItem.title)} - - ) : ( - - - {getMenuItems(submenuItem.children, index, submenuItem.title)} - - - ); -})} - - ) : null} - {getMenuItems(menu.children, index, menu.title)} + {menu.submenu && menu.submenu.length > 0 && ( + menu.submenu.map((submenuItem) => ( + + {getMenuItems(submenuItem.children)} + + )) + )} + {getMenuItems(menu.children)} ); - return ( <> { @@ -55,7 +54,6 @@ function BasicLayout(props) { orgs: orgs, loading: loading, selected: selected, - services: space.services, org_role: space.org_role, session: state.session, }; @@ -66,7 +64,6 @@ function BasicLayout(props) { permission: [], selected: selected, applications: [], - services: ['core'], org_role, session: state.session, }; @@ -144,7 +141,7 @@ function BasicLayout(props) { location.pathname.includes('pages')) && (location.pathname.includes('edit') || location.pathname.includes('create')); - function checkPermissions() { + /* function checkPermissions() { const requiredPermissions = permissionRequirements[location.pathname]; if (!requiredPermissions) { @@ -203,7 +200,7 @@ function BasicLayout(props) { /> ); - } + } */ return ( @@ -257,7 +253,6 @@ function BasicLayout(props) { orgs={orgs} loading={loading} applications={applications} - services={services} signOut={children.props.handleLogout} org_role={org_role} />