Управление видимостью меню (подменю)
Иногда, чтобы отобразить/скрыть левое меню/подменю недостаточно использовать в контроллере привязку к привилегиям.
Когда нужно реализовать свои проверки, например включен ли функционал в настройках системы, можно использовать следующий пример:
Отображение меню Канбан при условии что есть нужные привилегии, а так же в настройках он включен.
Создаем атрибут, где будем проверять, включен ли Канбан в настройках системы:
/// <inheritdoc />
public class KanbanEnabledAttribute : BasePermissionAttribute
{
/// <inheritdoc />
public override bool HasPermission()
{
return Locator.GetServiceNotNull<CRMSettingsModule>().Settings.EnableKanban;
}
}
Далее в котроллере проставляем указанный атрибут:
/// <inheritdoc />
[AnyPermission(CRMPermissionProvider.CRMAccessPermissionId, CRMPermissionProvider.SalesAccessPermissionId)]
[RouteArea(RouteProvider.AreaName)]
public class KanbanController : BPMController
{
/// <summary>
/// Канбан по сделкам
/// </summary>
/// <param name="filterId"></param>
/// <returns></returns>
[KanbanEnabled]
[ContentItem(Name = "SR.M('Канбан')", Image24 = Common.Web.RouteProvider.ImagesFolder + "kanban.svg")]
[FilterMenuItem(Id = CRMMenuItems.Kanban, /*Type = typeof(ICOMonthlyPayment),*/ FilterEditAction = "EditFilters")]
public ActionResult Index(long? filterId = null)
{
// TODO
}
}
После этого меню Канбан отображается не только исходя из прав (привилегий) пользователя, но и в соответствиями с настройками системы.
Точки расширения IMenuItemRenderer и IMenuCustomItems для подменю не работают!