MVCSiteMapProvider: възли без възможност за кликване с активирано подрязване на сигурността

Използвам MVCSiteMapProvider, v4.6.1

Това е моят проблем: имам раздел от менюто си, който е видим само за администраторите. Постигам това, като активирам изрязване на сигурността и декорирам моите контролери и/или методи на контролер, за да определя критериите за изрязване.

AdminTasks

  • Добавете
  • редактиране
  • Премахване

Това, което трябва да направя, е да направя възела „AdminTasks“ да не може да се кликва, но все пак да е видим само за администраторите.

Поведението, което наблюдавам, е, че ако маркирам „AdminTasks“ като clickable="false" в картата на сайта, възелът се показва за всички, независимо дали потребителят е администратор или не. Изглежда, че във възлите, маркирани с clickable='false', не се извършва подрязване на сигурността.

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

Правилно ли е предположението ми? Има ли някакъв начин да имате възел без кликване, който все още е подрязан за защита?

Благодаря


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


Отговори (1)


Възли за „групиране“ без възможност за щракване не представляват действие на контролер, така че няма разумен начин да се контролира сигурността на тях с помощта на AuthorizeAttribute.

Можете обаче да използвате TrimEmptyGroupingNodesVisibilityProvider, за да направите възел без кликване, невидим, когато няма достъпни възли, вложени в него. Следователно, ако текущият потребител няма разрешение за нито едно от децата на възела „Административни задачи“, възелът „Административни задачи“ ще бъде скрит.

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

Ако имате по-сложен сценарий от този, можете също да изградете свой собствен доставчик на видимост.

person NightOwl888    schedule 22.05.2014