Аутентификация с помощью форм с помощью Sitemap и asp: управление меню

У меня есть сайт с двумя разделами - по сути, для клиентов и для администраторов. Каждый раздел находится в своем собственном каталоге со своим собственным файлом 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, и вам нужно укажите роли в карте сайта. В противном случае они будут скрыты по умолчанию.


person cdonner    schedule 29.10.2009    source источник


Ответы (2)


Из Горизонтальное меню исчезает при securityTrimmingEnabled = "true":

Убедитесь, что каждая роль имеет доступ к (неиспользуемому) фиктивному siteMapNode в корне, включив role = "*" в web.sitemap, показанный ниже:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap  enableLocalization="true"
     xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="" title="" roles="*"  description="">
      <siteMapNode url="~/default.aspx" resourceKey="siteMapHome" 
       title="Home" roles="admin,account" description="" />
<!-----More nodes-->
person Pavel Chuchuva    schedule 14.12.2009

http://www.vbforums.com/showthread.php?p=3625975

Убедитесь, что вошедший в систему пользователь имеет роль администратора.

Редактировать:

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

Также укажите путь в webs.config.

<location path="admin/">
    <system.web>
        <authorization>
            <allow roles="Admin"  />
            <deny users="*"/>
        </authorization>
    </system.web>
</location>

И, наконец, удалите символ "~" со своей карты сайта, чтобы сравнение соответствовало.

После того, как все это будет сделано, и если это все еще не работает, объедините файл web.configs, чтобы убедиться, что разрешения не теряются.

person LiamB    schedule 29.10.2009
comment
Да, это то, что я пытаюсь сделать, и это не работает. Ссылка не помогла. У пользователя нет роли администратора. - person cdonner; 30.10.2009
comment
Я все это сделал, но проблема остается. Как только я включаю обрезку безопасности в карте сайта, меню исчезает. Если обрезка безопасности не включена, безопасность работает должным образом (т. Е. Перенаправление на страницу входа при отсутствии доступа). - person cdonner; 10.12.2009