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

StackOverflow https://stackoverflow.com/questions/1645186

Вопрос

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

Опять же, авторизация работает, и когда я вхожу в систему как Клиент и нажимаю на ссылку внутреннего сайта в меню, я перенаправляюсь на страницу входа в систему.Как администратор, я могу перейти на сайт администратора.Как только я включаю настройку безопасности для поставщика sitemap, который, как предполагается, удаляет ссылки, для которых я не авторизован, из меню, все меню исчезает.Что я упускаю из виду?Нужно ли мне настраивать элемент управления asp.menu для совместной работы с этим?

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

Обновить:Спасибо, что нашел этот пост в блоге, Павел.Из этого я узнал, что если есть записи sitemap, у которых нет пути и URL (что также верно для некоторых моих вложенных файлов), элемент управления не может определять разрешения из настроек в web.config, и вы должны указать роли в sitemap.В противном случае они будут скрыты по умолчанию.

Это было полезно?

Решение

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

  

Убедитесь, что у каждой роли есть доступ   на (неиспользованный) фиктивный siteMapNode в   корень путем включения ролей = " * " в   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-->

Другие советы

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, чтобы убедиться, что разрешения не теряются.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top