Скрыть авторизованный пункт меню в asp.net web.sitemap - PullRequest
2 голосов
/ 29 января 2009

У меня есть web.sitemap с включенной настройкой безопасности, однако мне нужно скрыть пункт меню, основанный на роли, на странице, у которой нет правил доступа в web.config.

Т.е. у меня есть страница Campaign, которая используется для просмотра существующих кампаний, а также для добавления новых кампаний, но я хочу, чтобы пункт меню «New Campaigns» был скрыт для анонимных пользователей. Я попытался добавить имя роли к атрибуту ролей в web.sitemap, но это никак не отразилось.

Я уверен, что должен быть быстрый способ сделать это без изменения провайдера карты сайта, который является моим следующим портом захода.

Ответы [ 2 ]

2 голосов
/ 30 января 2009

Если это просто особый случай для анонимных пользователей, вы можете создать второй SiteMap.

Создайте новый файл WebAnon.sitemap.
Создайте новый поставщик карты сайта в файле web.config

<add name="anonProvider" type="System.Web.XmlSiteMapProvider" siteMapFile="WebAnon.sitemap" securityTrimmingEnabled="true"/>

Установите для свойства SiteMapDataSource SiteMapProvider значение "anonProvider" в коде, если это анонимный пользователь.

1 голос
/ 29 января 2009

Атрибут roles в <siteMapNode /> является списком разрешений, а не запрещением. Создайте / измените соответствующий элемент <location /> в web.config, чтобы разрешить аутентифицированным пользователям и запретить анонимность; например,

<location path="campaigns.aspx">
 <system.web>
  <authorization>
   <allow users="*" />
   <deny users="?" />
  </authorization>
 </system.web>
</location>

Кстати, если вы используете принципала и роли Windows, любые изменения в составе вашей группы не вступят в силу, пока вы не выйдете из системы, а затем снова не включитесь.

...