Add option for left menu to display subitems based on their own permission, instead of parent permission

This commit is contained in:
Magdalena Markusik 2021-08-20 10:55:04 +02:00
parent 14e36db399
commit 745b5d49ed

View file

@ -50,30 +50,33 @@ function createMenuStructure(intl: IntlShape, user: User): SidebarMenuItem[] {
ariaLabel: "products", ariaLabel: "products",
label: intl.formatMessage(sectionNames.products), label: intl.formatMessage(sectionNames.products),
id: "products", id: "products",
url: productListUrl() url: productListUrl(),
permissions: [PermissionEnum.MANAGE_PRODUCTS]
}, },
{ {
ariaLabel: "categories", ariaLabel: "categories",
label: intl.formatMessage(sectionNames.categories), label: intl.formatMessage(sectionNames.categories),
id: "categories", id: "categories",
url: categoryListUrl() url: categoryListUrl(),
permissions: [PermissionEnum.MANAGE_PRODUCTS]
}, },
{ {
ariaLabel: "collections", ariaLabel: "collections",
label: intl.formatMessage(sectionNames.collections), label: intl.formatMessage(sectionNames.collections),
id: "collections", id: "collections",
url: collectionListUrl() url: collectionListUrl(),
permissions: [PermissionEnum.MANAGE_PRODUCTS]
}, },
{ {
ariaLabel: "giftCards", ariaLabel: "giftCards",
label: intl.formatMessage(sectionNames.giftCards), label: intl.formatMessage(sectionNames.giftCards),
id: "giftCards", id: "giftCards",
url: giftCardsListUrl() url: giftCardsListUrl(),
permissions: [PermissionEnum.MANAGE_GIFT_CARD]
} }
], ],
iconSrc: catalogIcon, iconSrc: catalogIcon,
label: intl.formatMessage(commonMessages.catalog), label: intl.formatMessage(commonMessages.catalog),
permissions: [PermissionEnum.MANAGE_PRODUCTS],
id: "catalogue" id: "catalogue"
}, },
{ {
@ -160,12 +163,30 @@ function createMenuStructure(intl: IntlShape, user: User): SidebarMenuItem[] {
} }
]; ];
return menuItems.filter( const isMenuItemPermitted = (menuItem: FilterableMenuItem) =>
menuItem => !menuItem.permissions ||
!menuItem.permissions || (user?.userPermissions || []).some(permission =>
(user?.userPermissions || []).some(permission => menuItem.permissions.includes(permission.code)
menuItem.permissions.includes(permission.code) );
)
const getFilteredMenuItems = (menuItems: FilterableMenuItem[]) =>
menuItems.filter(isMenuItemPermitted);
return menuItems.reduce(
(resultItems: FilterableMenuItem[], menuItem: FilterableMenuItem) => {
const { children } = menuItem;
if (!isMenuItemPermitted(menuItem)) {
return resultItems;
}
const filteredChildren = children
? getFilteredMenuItems(children)
: undefined;
return [...resultItems, { ...menuItem, children: filteredChildren }];
},
[] as FilterableMenuItem[]
); );
} }