Pregunta

ruedo mi propia SiteMapProvider System.Web.XmlSiteMapProvider heredar.

Quiero anular la lógica de la comprobación de usuario tenga un papel especificado en la propiedad de roles siteMapNode:

<siteMapNode url="Add.aspx?type=user" title="Add user" roles="admin" />

¿Cómo puedo hacer eso? ¿Qué clase de miembro de la llamada hace XmlSiteMapProvider para comprobar que si securityTrimmingEnabled="true"?

¿Fue útil?

Solución

abatishchev está cerca, pero no proporciona una orientación clara. Llamando base se aplicarán las reglas de control de acceso por defecto de ASP.NET. Si tiene reglas personalizadas, sólo tiene que tomar su decisión y devolver un bool.

public override bool IsAccessibleToUser(HttpContext context, SiteMapNode node)
{
     // use the properties of the context and node to determine accessibility.

     // only call base if you do not want to apply your custom rules
     // return base.IsAccessibleToUser(context, node);
}

Otros consejos

public override bool IsAccessibleToUser(HttpContext context, SiteMapNode node)
{
     var roles = node.Roles; // here it is!
     return base.IsAccessibleToUser(context, node);
}

El más fácil, si alguien quiere una respuesta en este caso es agregar esto a su web.config

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
    <providers>
      <clear/>
      <add name="XmlSiteMapProvider"
           description="Default Sitemap Provider"
           type="System.Web.XmlSiteMapProvider"
           siteMapFile="Web.sitemap"
           securityTrimmingEnabled="true"/>
    </providers>
  </siteMap>

A continuación, en el mapa del sitio puede agregar las funciones de atributo = "algo"

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