¿Cómo afectar a los nodos secundarios individuales cuando la Seguridad recorta un Mapa de sitio?

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

Pregunta

Tengo un sitio ASP.Net, en el que estoy tratando de usar las funciones de Autenticación de Windows y Active Directory para limitar el acceso a algunas páginas. He consultado un página de tutorial de Scott Gu , pero no puedo lograr lo que quiero.

Estoy ignorando el nodo raíz en mi SiteMapDataSource . Quiero mostrar los " Documentos " nodo a todos los usuarios, pero limita la visualización de " Buscar " y " Subir " roles a 2 roles diferentes. Estoy en el " DOMINIO \ validrole " pero no en el " DOMINIO \ madeuprole " ;. Con el sitemap y web.config a continuación, se muestran todos los nodos. Si elimino los roles = " * " de los " Documentos " nodo (como lo sugiere Scott Gu), no aparece ningún nodo.

¿Hay alguna manera de limitar la visualización de nodos secundarios individuales sin tener que escribir código personalizado?

Este es mi mapa del sitio:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
    <siteMapNode url="~/Default.aspx" 
                 title="Home">
        <siteMapNode title="Documents" roles="*">
            <siteMapNode url="~/Documents/Search.aspx" 
                         title="Search Documents" 
                         roles="DOMAIN\validrole" />
            <siteMapNode url="~/Documents/Upload.aspx" 
                         title="Upload Documents" 
                         roles="DOMAIN\madeuprole" />
            <siteMapNode url="~/Documents/Publish.aspx" 
                         title="Publish Documents" />
        </siteMapNode>
        <siteMapNode title="Users" roles="*">
            <siteMapNode url="~/Users/Search.aspx" 
                         title="Search Users" 
                         roles="DOMAIN\validrole" />
        </siteMapNode>
    </siteMapNode>
</siteMap>

Y esta es la sección relevante de mi web.config:

<authentication mode="Windows"/>
<authorization>
    <allow roles="DOMAIN\validrole"/>
    <deny users="*"/>
</authorization>

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
    <providers>
        <add name="XmlSiteMapProvider"
             description="Default SiteMap provider."
             type="System.Web.XmlSiteMapProvider"
             siteMapFile="Web.sitemap"
             securityTrimmingEnabled="true" />
    </providers>
</siteMap>
¿Fue útil?

Solución

Ordenado: debe configurar la autorización de la página en el archivo Web.config como este:

<location path="Documents/Upload.aspx">
    <system.web>
        <authorization>
            <allow roles="DOMAIN\madeuprole"/>
            <deny users="*"/>
        </authorization>
    </system.web>
</location>

Intenté esto con la ruta " ~ / Documents / Upload.aspx " , pero no funcionó, debe ser una ruta relativa al archivo de configuración.

Además, tuve que poner una URL en los nodos de mi mapa del sitio, como este:

<siteMapNode title="Documents" roles="*" url="Made-Up.aspx">

Esto detuvo la desaparición de todo, aunque no tengo idea de por qué. No estoy mostrando la URL, por lo que cualquier inventada hace el truco.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top