Come utente di controllo XmlSiteMapProvider di essere in ruolo specificato?
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"
?
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"