Полезное

Разные интересные примеры и важные решения

Управление видимостью меню (подменю)

Иногда, чтобы отобразить/скрыть левое меню/подменю недостаточно использовать в контроллере привязку к привилегиям.

Когда нужно реализовать свои проверки, например включен ли функционал в настройках системы, можно использовать следующий пример:

Отображение меню Канбан при условии что есть нужные привилегии, а так же в настройках он включен.

Создаем атрибут, где будем проверять, включен ли Канбан в настройках системы:

/// <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 для подменю не работают!