Add option for left menu to display subitems based on their own permission, instead of parent permission
This commit is contained in:
parent
14e36db399
commit
745b5d49ed
1 changed files with 32 additions and 11 deletions
|
@ -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[]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue