Domanda

I rotolare il mio SiteMapProvider ereditare System.Web.XmlSiteMapProvider.

Voglio ignorare la logica di controllo utente sia in un ruolo specificato nel roles proprietà di siteMapNode:

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

Come posso fare questo? Quale classe di membro fa chiamata XmlSiteMapProvider per verificare che se securityTrimmingEnabled="true"?

È stato utile?

Soluzione

abatishchev è vicino, ma non fornisce una guida chiara. La chiamata di base applicherà le regole di controllo di accesso predefinito asp.net. Se si dispone di regole personalizzate, è sufficiente prendere la vostra decisione e restituire 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);
}

Altri suggerimenti

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

più semplice, se qualcuno vuole una risposta su questo è quello di aggiungere questo al tuo 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>

Poi, nel tuo sito è possibile aggiungere i ruoli di attributo = "qualcosa"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top