MVCsiteMapProvider: узлы без кликов с включенной обрезкой безопасности

Я использую MVCsiteMapProvider, v4.6.1.

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

Административные задачи

  • Добавлять
  • Редактировать
  • Удалять

Что мне нужно сделать, так это сделать узел «AdminTasks» недоступным для кликов, но видимым только для администраторов.

Поведение, которое я наблюдаю, заключается в том, что если я отмечу «AdminTasks» как clickable="false" в карте сайта, узел будет отображаться для всех, независимо от того, является ли пользователь администратором или нет. Похоже, что в узлах с пометкой clickable='false' не выполняется обрезка безопасности.

Я предполагаю, не изучая слишком много кода, что, когда узел помечен clickable='false', SiteMapProvider не пытается разрешить какой-либо маршрут (поскольку он все равно не нужен для целей навигации); но при этом он не проверяет декорации в контроллерах, поэтому пропускает обрезку безопасности.

Верно ли мое предположение? Есть ли способ сделать неактивный узел, который по-прежнему защищен безопасностью?

Спасибо


person user3661394    schedule 21.05.2014    source источник


Ответы (1)


Узлы «группировки», на которые нельзя щелкнуть, не представляют действия контроллера, поэтому не было бы разумного способа контролировать их безопасность с помощью AuthorizeAttribute.

Однако для создания узел, на который нельзя щелкнуть, невидим, если в нем нет вложенных доступных узлов. Поэтому, если текущий пользователь не имеет разрешения ни для одного из дочерних элементов узла «Административные задачи», узел «Административные задачи» будет скрыт.

<mvcSiteMapNode title="Admin Tasks" clickable="false" visibilityProvider="MvcSiteMapProvider.TrimEmptyGroupingNodesVisibilityProvider, MvcSiteMapProvider">

Если у вас более сложный сценарий, вы также можете создайте собственного поставщика видимости.

person NightOwl888    schedule 22.05.2014