3

Je roule mon propre SiteMapProvider en héritant System.Web.XmlSiteMapProvider.Comment XmlSiteMapProvider vérifie-t-il que l'utilisateur occupe le rôle spécifié?

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

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

Comment puis-je faire cela? Quel membre de la classe XmlSiteMapProvider appelle pour vérifier que si securityTrimmingEnabled="true"?

Répondre

3

abatishchev est proche, mais ne fournit pas de guide clair. La base d'appel appliquera les règles de contrôle d'accès par défaut d'asp.net. Si vous avez des règles personnalisées, prenez simplement votre décision et renvoyez un booléen.

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); 
} 
+0

Ma question n'a malheureusement attiré aucun utilisateur pendant un certain temps donc j'ai dû trouver la solution par moi-même et heureusement je l'ai fait. Vous ne pourriez pas mentionner que je suis simultanément OP et la réponse simple est mon aussi. Parce qu'accepter sa propre réponse n'apporte aucune réputation, je suis heureux d'accepter votre réponse :) Merci! – abatishchev

+0

@aba - en fait, je n'ai pas remarqué que OP et la réponse provenaient de la même personne, juste que les conseils pourraient être un peu plus clair. Je suis content que vous l'ayez compris et heureux de pouvoir vous aider, si je le pouvais. –

+0

Ok, je peux surcharger 'IsAccessibleToUser' pour appliquer sa propre logique à vérifier. Mais comment * original * 'IsAccessibleToUser' fonctionne? Les réflecteurs montrent qu'il vérifie 'context.User.IsInRole (role)'. Savez-vous comment définir les rôles pour 'IPrincipal'? – abatishchev

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

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> 

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