2014-01-23 7 views
1

Я унаследовал сайт, который широко использует файлы Sitemap. Меня спросили, могу ли я создавать пункты меню, только если пользователь вошел в систему с правильной ролью.Элементы SiteMap Not Hiding

(я знаю, что моя роль на основе Войти все работает правильно)

У меня есть следующие в моей карте сайта

<siteMapNode url="~/" title="Home" description="Home"> 
<siteMapNode title="Home" url="default.aspx" /> 
<!--Sets up Product page-->  
    ... Product map always shows, so skipped ... 

<siteMapNode title="Support" url="~/support/default.aspx"> 
    <siteMapNode title="CurrentIssues" url="~/support/Issues.aspx" role="Customer" /> 
</siteMapNode> 
... 

и эта линия в моей конфигурации

<add name="main_siteMap" description="Menu Site map Provider" type="System.Web.XmlSiteMapProvider" siteMapFile="Web.sitemap" secuirityTrimmingEnabled="true"/> 

Но независимо от того, независимо от того, вошел ли я в систему или отсутствовал, всегда отображается пункт меню CurrentIssues. (Хотя, если вы попытаетесь щелкнуть по нему, это приведет вас к LoginPage.)

Так что же я пропустил, чтобы иметь возможность скрывать пункты меню для тех, которые не вошли в правильную роль?

ответ

1

Есть несколько проблем с тем, что вы опубликовали.

Значение siteMapNode должно быть roles не role.

Вашей web.config запись имеет опечатку (secuirityTrimmingEnabled имеет дополнительную i) и должна, вероятно, более выглядеть следующим образом:

<siteMap defaultProvider="main_siteMap" enabled="true"> 
    <providers> 
     <add name="main_siteMap" 
      description="Menu Site map Provider" 
      type="System.Web.XmlSiteMapProvider " 
      siteMapFile="Web.sitemap" 
      securityTrimmingEnabled="true" /> 
    </providers> 
</siteMap> 

Также обратите внимание, что обеспечение карты сайта таким образом, требует надлежащего выполнения RoleManagement, а это означает, что в этом случае вам также необходимо обеспечить, что путь в web.config:

<location path="support/issues.aspx"> 
    <system.web> 
     <authorization> 
      <allow roles="Customer" /> 
      <deny users="*" /> 
     </authorization> 
    </system.web> 
</location> 

также отметим, что в the docs:

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

+0

Ok, я установил опечаток в код, я, похоже, не могу редактировать выше). Он по-прежнему не хочет скрывать параметры меню, но .. – Matt

+0

Используете ли вы пользовательский поставщик роли? – MikeSmithDev

+0

Нет, все это из коробки. Тем не менее, есть несколько файлов Sitemap, если это имеет опору. Я установил все провайдеры в файле конфигурации для использования обрезки secuirty и установил, если необходимо, соответствующие пункты меню. Еще нет радости. Испугавшись, нужно ли мне это делать в коде, а не в конфигурации: -/ – Matt

0

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

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 

    <location path="Manual_de_rol_aprobador.pdf"> 
    <system.web> 
     <authorization> 
     <allow roles="aprobador, administradorDeSistema" /> 
     <deny users="*" /><!-- Usuarios autenticados --> 
     <deny users="?" /><!-- Usuarios anonimos --> 
     </authorization> 
    </system.web> 
    </location> 

    <location path="Manual_de_rol_calificador.pdf"> 
    <system.web> 
     <authorization> 
     <allow roles="calificador, administradorDeSistema" /> 
     <deny users="*" /><!-- Usuarios autenticados --> 
     <deny users="?" /><!-- Usuarios anonimos --> 
     </authorization> 
    </system.web> 
    </location> 


    <system.web> 
    <authorization> 
     <allow roles="calificador, aprobador, administradorDeSistema" /> 
     <deny users="*" /><!-- Usuarios autenticados --> 
     <deny users="?" /><!-- Usuarios anonimos --> 
    </authorization> 
    </system.web> 

</configuration>