Question

Je roule ma System.Web.XmlSiteMapProvider héritant SiteMapProvider.

Je veux remplacer la logique de contrôle de l'utilisateur d'être dans un rôle spécifié dans la roles propriété de siteMapNode:

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

Comment puis-je faire cela? Membre de quelle classe fait appel XmlSiteMapProvider pour vérifier que si securityTrimmingEnabled="true"?

Était-ce utile?

La solution

abatishchev est proche, mais ne fournit pas de directives claires. L'appel de base appliquera les règles de contrôle d'accès par défaut de asp.net. Si vous avez des règles personnalisées, faites simplement votre décision et retourner 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);
}

Autres conseils

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

Easiest, si quelqu'un veut une réponse sur celui-ci est d'ajouter ceci à votre 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>

puis dans votre sitemap, vous pouvez ajouter les rôles d'attribut = « quelque chose »

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top