Навигация по сайту в ASP.NET 2.0 - Настройка навигации по сайту, используя ограничения прав (security trimming)

ОГЛАВЛЕНИЕ

Настройка навигации по сайту, используя ограничения прав (security trimming)

По умолчанию навигация по сайту не использует ограничения прав (security trimming). Вне зависимости от типа пользователя, посещающего сайт, а также от указанных правил авторизации, каждый пользователь видит все части карты сайта при просмотре информации с помощью элементов управления TreeView либо Menu. Путем установления ограничений система навигации по сайту автоматически ограничивает результаты, основываясь на текущем авторизированном пользователе и на ограничениях в доступе, на которые ссылаются элементы <siteMapNode> в карте сайта.

Настройки навигации могут быть установлены при помощи файла Web.config, используя следующий шаблон:

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
  <providers>
    <add name="XmlSiteMapProvider"
         description="Default SiteMap provider."
         type="System.Web.XmlSiteMapProvider"
         siteMapFile="siteMapFileName"
         securityTrimmingEnabled="true" />
  </providers>
</siteMap>

Модель провайдеров (provider model) предоставляет разработчикам определенный публичный (public) интерфейс прикладных программ (API), но позволяет настроить внутреннюю обработку при необходимости. По умолчанию навигация по сайту использует XmlSiteMapProvider, которая содержит информацию о карте сайта из XML-файла Web.sitemap. Вы можете изменить используемый провайдер, либо изменить настройки провайдера, установленного по умолчанию, при помощи файла through the Web.config.

Чтобы изменить настройки провайдера, установленного по умолчанию, просто добавьте нового провайдера, который будет использовать тот же тип, как и стандартный провайдер (System.Web.XmlSiteMapProvider), устанавливая настройки по необходимости. Блок кода, показанный выше, демонстрирует способ настройки двух параметров XmlSiteMapProvider:

  • Параметр siteMapFile содержит название файла карты сайта, используемое провайдером; по умолчанию данное значение равно Web.sitemap. При желании вы можете настроить название файла. Я советую вам проверять файл, чтобы  быть уверенным, что название файла оканчивается расширением .sitemap, поскольку данное расширение защищено движком ASP.NET, тем самым защищая файл от просмотра пользователями.
  • Параметр securityTrimmingEnabledуказывает на то, использовано ли ограничение прав (security trimming) или нет. Установите данный параметр в значении "Истина" (True), если требуется использование ограничений прав.

И это все! Применив одну настройку, система навигации по сайту станет настолько смышленой, что будет отображать разделы соответственно настройкам авторизации, указанным для ссылок на ресурсы (URL) в элементах <siteMapNode>, а также от авторизированного пользователя. Следующее изображение показывает элемент TreeView, отображенный при посещении анонимного пользователя (тот, кто еще не авторизовался), а также при посещении обычного пользователя (Average User) и администратора (Admin user). Анонимный пользователь увидит (все) две ссылки - Home и My Blog. Обычный пользователь (Average User) увидит дополнительную ссылку - Auth Users, которая не была отображена анонимному пользователю, поскольку данная ссылка на ресурс (~/AuthUsers/Default.aspx) настроена таким образом, что только авторизированные пользователи имеют к ней доступ. Администратору (Admin user) доступна еще одна дополнительная ссылка, поскольку он обладает ролью администратора (Administrator role) и ссылка на ресурс, указанная в узле Admin карты сайта (~/Admin/Default.aspx), настроена таким образом, что только администраторы имеют к ней доступ.

The TreeView When Visited by an Anonymous Visitor

The TreeView When Visited by Average User The TreeView When Visited by Admin