Pregunta

Tengo un sitio con 2 secciones, una para clientes y otra para administradores, en esencia. Cada sección está en su propio directorio con su propio web.config y sitemap. La seguridad y el acceso funcionan bien.

Cuando estoy conectado como administrador, quiero ver los elementos del menú que enlazan con la otra sección, sin embargo. Agregué enlaces al mapa del sitio, por ejemplo:

<siteMapNode url="~/Customer/Default.aspx?3" title="Customer Site"
description="Switch to customer site" roles="Administrator"/>

Esto parece no tener ningún efecto, ya que todavía veo el elemento del menú cuando estoy conectado como cliente. Cuando enciendo el recorte de seguridad, como en

<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>

todos los elementos del menú se han ido.

De hecho, tengo web.configs en las carpetas Interna y Cliente, p. para el cliente:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <authorization>
      <allow roles="Customer" />
      <deny users="*" />
    </authorization>
  </system.web>
</configuration>

y el administrador:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
        <authorization>
            <allow roles="Administrator" />
            <deny users="*" />
        </authorization>
    </system.web>
</configuration>

Nuevamente, la autorización funciona, y cuando me conecto como Cliente y hago clic en el enlace del sitio interno en el menú, se me redirige a la página de inicio de sesión. Como administrador, puedo hacer clic en el sitio de administración. Tan pronto como enciendo el recorte de seguridad para el proveedor del mapa del sitio, que se supone que elimina los enlaces para los que no estoy autorizado, el menú completo desaparece. ¿Qué me estoy perdiendo? ¿Necesito configurar el control asp.menu para que funcione junto con esto?

Actualización: pongo una recompensa por esta pregunta, porque todavía no puedo hacer que funcione. Nos inclinamos a tirar el control del menú y escribir el nuestro, pero si alguien puede dar una pista, sería preferible, por supuesto. Una vez más, el problema no es con la seguridad: los roles y las reglas de acceso funcionan como se esperaba. Es con el control del menú y el ajuste de seguridad. El menú desaparece por completo cuando se activa el recorte de seguridad para un mapa del sitio.

Actualización: Gracias por encontrar esta publicación de blog, Pavel. Lo que aprendí de esto es que si hay entradas de mapa de sitio que no tienen una ruta y URL (que también es cierto para algunos de mis submenús), el control no puede inferir permisos de la configuración en web.config, y usted tiene que especifique los roles en el mapa del sitio. De lo contrario, estarán ocultos por defecto.

¿Fue útil?

Solución

De El menú horizontal desaparece con securityTrimmingEnabled = " true " :

  

Asegúrese de que cada rol tenga acceso   al sitio ficticio (no utilizado) MapNode en   la raíz al incluir roles = " * " en   mapa del sitio web que se muestra a continuación:

<?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-->

Otros consejos

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

Verifique que el usuario conectado tenga la función de Administrador.

Editar:

También estoy bastante seguro de que no especifiques el rol en siteMapNode. Creo que los mapas del sitio basados ??en roles funcionan a partir de los roles existentes, por ejemplo, si un usuario tiene acceso a la ruta que especifica la nota del sitio, la mostrará.

También especifique la ruta en webs.config.

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

Y finalmente elimine el '~' de su mapa del sitio para que la comparación coincida.

Una vez que todo esté listo y si todavía no funciona, combine web.configs para asegurarse de que no se pierdan los permisos.

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