У меня есть сайт с двумя разделами - по сути, для клиентов и для администраторов. Каждый раздел находится в своем собственном каталоге со своим собственным файлом web.config и картой сайта. Безопасность и доступ работает нормально.
Однако, когда я вхожу в систему как администратор, я хочу видеть пункты меню, которые ссылаются на другой раздел. Я добавил ссылки на карту сайта, например:
<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 для совместной работы с этим?
Обновление: я назначил награду за этот вопрос, потому что я все еще не могу заставить его работать. Мы склонны отказаться от элемента управления меню и написать свой собственный, но если кто-то может дать подсказку, это, конечно, будет предпочтительнее. Опять же - проблема не в безопасности - роли и правила доступа работают должным образом. Это с управлением меню и обрезкой безопасности. Меню полностью исчезает, когда для карты сайта включена обрезка безопасности.
Обновление: Спасибо, что нашли этот пост в блоге, Павел. Из этого я узнал, что если есть записи карты сайта, у которых нет пути и URL (что также верно для некоторых из моих подменю), элемент управления не может вывести разрешения из настроек в web.config, и вам нужно укажите роли в карте сайта. В противном случае они будут скрыты по умолчанию.