Пример: имеется веб-приложение Гостиница
, доступ к которому имеют пользователи с двумя возможными ролями Приемщик
и admin
.
Если текущий пользователь имеет роль admin
, то его карта сайта должна выглядеть следующим образом:
Если текущий пользователь имеет роль Приемщик
, то его карта сайта должна выглядеть следующим образом:
Необходимо разграничить доступ к соответствующим формам приложения. Для этого указываем роль пользователя, который должен иметь доступ к элементцу карты сайта, в атрибуте roles
. Имеем следующую карту сайта (содержимое файла web.sitemap
):
<siteMapNode title="Гостиница" roles="Приемщик,admin" xmlns="">
<siteMapNode title="Бронирования" description="" url="~/forms/Bronirovanie/G_BronirovanieL.aspx" roles="admin"/>
<siteMapNode title="Номерной фонд" description="" url="~/forms/KomnataGostinicy/G_KomnataGostinicyL.aspx" roles="Приемщик"/>
<siteMapNode title="Вид животного" description="" url="~/forms/ZHivotnoe/G_ZHivotnoeL.aspx" roles="Приемщик"/>
</sitemapNode>
Необходимо обратить внимание на то, что у узла карты сайта верхнего уровня (Гостиница
) указаны все роли пользователей, которые могут иметь доступ к этому меню (и Приемщик
, и admin
).
Для того чтобы обеспечить корректное отображение вложенных пунктов меню в зависимости от роли пользователя, необходимо в папки веб-приложения, которые соответствуют указанным в url
формам, добавить файлы web.config
.
В папку forms/Bronirovanie
добавить web.config
следующего содержания:
<configuration>
<system.web>
<authorization>
<allow roles="admin"/>
<deny users="*"/>
</authorization>
</system.web>
</configuration>
В папку forms/KomnataGostinicy
и forms/ZHivotnoe
добавить web.config
следующего содержания:
<configuration>
<system.web>
<authorization>
<allow roles="Приемщик"/>
<deny users="*"/>
</authorization>
</system.web>
</configuration>
В результате вложенные пункты меню будут отображаться в зависимости от того, какова роль текущего пользователя веб-приложения.
При windows-аутентификации пользователи обрабатываются вместе с доменом. Поэтому необходимо использовать провайдеры, которые учитывают домен. Для этого в конфигурационном файле приложения нужно указать следующее:
<membership defaultProvider="CaseberryMembershipProvider">
<providers>
<clear />
<add name="CaseberryMembershipProvider" type="CheckingLibrary.Web.CaseberryDomainMembershipProvider" applicationName="SLAuthSample" />
</providers>
</membership>
<roleManager defaultProvider="CaseberryRoleProvider" enabled="true">
<providers>
<clear />
<add name="CaseberryRoleProvider" type="CheckingLibrary.CaseberryDomainRoleProvider" />
</providers>
</roleManager>
Кроме того стоит обратить внимание на особенность обработки sitemap-файла при windows-аутентификации. А именно обработку sitemapNode
, у которой указан url
и roles
.
<siteMapNode title="Роли" url="~/flexberry/DvorecList" roles="tsar" />
При использовании стандартного sitemap-провайдера данная вершина будет всегда видимой, так как при наличии атрибута url
выполняется проверка доступности url-узла для текущего пользователя.
Для решения данной проблемы существуют следующие способы:
- Использовать собственный sitemap-провайдер.
- Добавить промежуточную вершину без атрибута url.
- Настроить параметры доступа к файлам.