Disable Report and Dashboard Menu content editors
We had a requirement where Report and Dashboard menus were needed only for specific roles/users Or Admins — but not for editors.
Below is default view for editors where you can see these menus:

But required view is: 
1. To achieve above, we implemented a custom Interceptor class that wraps another IMenuProvider and overrides the authorization logic as below.
using EPiServer.Shell.Navigation;
namespace alloy_example.Customization.Menus;
public class MenuProviderInterceptor : IMenuProvider
{
private readonly IMenuProvider _menu;
public MenuProviderInterceptor(IMenuProvider menu)
{
_menu = menu;
}
public IEnumerable<MenuItem> GetMenuItems()
{
var menuItems = _menu.GetMenuItems().ToList();
menuItems.ForEach(item =>
{
item.AuthorizationPolicy = "episerver:cmsadmin";
});
return menuItems;
}
}
2. we need to hook this interceptor only for specific providers — like ReportsMenuProvider or DashboardMenuProvider based on requirement.
services.Intercept<IMenuProvider>(interceptorFactory);
private static IMenuProvider interceptorFactory(IServiceProvider provider1, IMenuProvider provider2)
{
var types = new[] { typeof(ReportsMenuProvider), typeof(DashboardMenuProvider) };
return types.Any(t => t.Equals(provider2.GetType())) ? new MenuProviderInterceptor(provider2) : provider2;
}
This way, only ReportsMenuProvider and DashboardMenuProvider are affected — all other menus remain untouched. Hope this helps someone!
Comments