У меня есть сайт с 2 разделами - один для клиентов и один для администраторов.
Каждый раздел находится в своем собственном каталоге со своими web.config и sitemap. Безопасность и доступ работает нормально.
Когда я вошел в систему как администратор, я хочу видеть пункты меню, которые ссылаются на другой раздел. Я добавил ссылки на карту сайта, например:
<siteMapNode url="~/Customer/Default.aspx?3" title="Customer Site"
description="Switch to customer site" roles="Administrator"/>
Это, кажется, не имеет никакого эффекта, так как я все еще вижу пункт меню, когда захожу как клиент.
Когда я включаю подстройку безопасности, как в
<siteMap enabled="true">
<providers>
<add name="InternalSiteMap" type="System.Web.XmlSiteMapProvider"
siteMapFile="~/Internal/Internal.sitemap" />
<add name="CustomerSiteMap" type="System.Web.XmlSiteMapProvider"
siteMapFile="~/Customer/Customer.sitemap" securityTrimmingEnabled="true" />
</providers>
</siteMap>
все пункты меню пропали.
У меня фактически есть web.configs во внутренней и клиентской папках, например для клиента:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<authorization>
<allow roles="Customer" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
и администратор:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<authorization>
<allow roles="Administrator" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
Опять же, авторизация работает, и когда я вошел в систему как Клиент и щелкаю по внутренней ссылке сайта в меню, я перенаправляюсь на страницу входа. Как администратор, я могу перейти на сайт администратора. Как только я включаю усечение безопасности для провайдера карты сайта, который должен убирать ссылки, на которые у меня нет прав доступа, меню полностью исчезает. Что мне не хватает? Нужно ли настраивать элемент управления asp.menu для совместной работы с этим?
Обновление: я назначил награду за этот вопрос, потому что до сих пор не могу заставить ее работать. Мы склонны отказываться от управления меню и писать свои собственные, но если кто-то может дать подсказку, это, конечно, предпочтительнее.
Опять же - проблема не в безопасности - роли и правила доступа работают, как и ожидалось. Именно с помощью меню управления и безопасности обрезки. Меню полностью исчезает, если для карты сайта включена подстройка безопасности.
Обновление: Спасибо, что нашли этот пост, Павел. Из этого я узнал, что если существуют записи файла Sitemap, у которых нет пути и URL-адреса (что также верно для некоторых из моих подменю), элемент управления не может определить разрешения из настроек в файле web.config, и вам необходимо укажите роли в карте сайта. В противном случае они будут скрыты по умолчанию.