ASP.NET web.sitemap - les rôles ne semblent pas contrôler la visibilité?
J'ai une (simple) sitemap et je suis à essayer de comprendre pourquoi un certain sous-menu est toujours visible.
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="~/Login.aspx" title="Home" description="RivWorks" roles="*">
<siteMapNode url="" title="Dashboard" description="" roles="campaigns, auto_negotiation">
<siteMapNode url="CampaignBuilder.aspx" title="Campaign Manager" description="Manage your campaign settings" roles="campaigns" />
<siteMapNode url="ProductManager.aspx" title="Negotiation Manager" description="Manage your product and negotiation settings" roles="auto_negotiation" />
</siteMapNode>
<siteMapNode url="" title="Support Options" description="" roles="customers, customer_super, riv_admins, riv_super">
<siteMapNode url="ChangePassword.aspx" title="Change Password" description="" roles="customers, customer_super, riv_admins, riv_super" />
<siteMapNode url="http://rivworks.zendesk.com/requests/anonymous/new" title="Submit a Support Ticket" description="" roles="customers, customer_super, riv_admins, riv_super" />
<siteMapNode url="http://rivworks.zendesk.com/forums/49919/entries" title="Tips & Tricks" description="" roles="customers, customer_super, riv_admins, riv_super" />
</siteMapNode>
</siteMapNode>
</siteMap>
REMARQUE: WEB.PARAMÈTRES DE CONFIGURATION DE
<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
<providers>
<add name="XmlSiteMapProvider"
description="Default Site Map Provider"
type="System.Web.XmlSiteMapProvider"
siteMapFile="Web.sitemap"
securityTrimmingEnabled="true" />
</providers>
</siteMap>
J'ai une option du menu principal de "tableau de bord". En vertu de cet élément de menu, j'ai 2 options: 1) le Gestionnaire de Campagne & 2) la Négociation Manager. Maintenant, ce qui est intéressant, c'est lorsque je suis dans les campagnes rôle OU l'auto-négociation de rôle, je vois le tableau de bord et les DEUX sous-menus. Ce n'est pas le comportement que j'attendais. J'attends de voir les deux sous-menus lorsque je suis dans les campagnes rôle ET auto-négociation de rôle. Le OU scénario devrait me donner le menu du tableau de bord et une OU l'autre sous-élément...
Je fais quelque chose de mal ici ou la pensée d'une mauvaise façon?
TIA
source d'informationauteur Keith Barrows
Vous devez vous connecter pour publier un commentaire.
Je soupçonne que vous avez tombé dans le piège de nous le faisons tous, à croire que le rôle de l'attribut limite la visibilité des nœuds. Il n'est pas, en effet, il élargit la visibilité. Toutes les restrictions sont fait avec la section standard dans le web.config.
Complète le texte ci-dessous est à partir de l'original post à https://web.archive.org/web/20130408064047/http://ipona.com/asp-net-site-maps-security-trimming-and-roles/ )
C'est l'une des questions les plus fréquemment posées et semble une source constante de confusion pour tout le monde, comme il l'a été pour moi quand j'ai lu à ce sujet. L'ASP.NET SiteMap permet à une structure de navigation pour être défini comme un ensemble d'éléments XML, qui sont parfaits pour décrire une hiérarchie d'éléments de menu. Ces éléments XML sont un siteMapNode élément, qui a un attribut rôles. Il semble évident que ce définit les rôles qu'on peut voir à ce point, mais l'évidence est en fait mal. Ici est le fait le plus important sur les cartes de site:
Les rôles attribut ne doit pas restreindre la visibilité d'un nœud.
Qui doit être assez claire, même si elle semble encore mal. Voici comment cela fonctionne.
Toute restriction à des pages est assurée par l'autorisation. Vous pouvez le faire soit dans le web de la base.config ou web.les fichiers de configuration dans des dossiers. Par exemple, supposons qu'il existe un dossier Admin, en vertu de laquelle toutes les pages d'administration, sont conservés. Vous voulez seulement ces pages accessibles aux utilisateurs dans le rôle Admin. Vous devez configurer votre autorisation comme suit:
Le dossier Admin peut désormais plus être consulté par toute personne qui n'est pas dans le rôle d'Administrateur; si vous n'êtes pas dans le rôle d'Administrateur et d'essayer de naviguer d'une page dans le dossier Admin, soit via un lien sur une autre page ou en tapant directement l'URL dans le navigateur, vous serez redirigé vers la page de connexion. Vous pouvez avoir plusieurs emplacement des éléments de votre site web.config, pour différents dossiers ou même des fichiers individuels; en fait, si vous avez un restrictive site, vous pouvez explicitement ouvrir certaines pages, comme la page de connexion; il est difficile de se connecter à un site lorsque vous n'avez pas l'autorisation d'accéder à la page de connexion. Si vous préférez ne pas encombrer votre web de la base.configuration, vous pouvez créer un site web.fichier de config dans le dossier Admin avec les mêmes règles, vous n'aurez pas besoin de l'emplacement de l'élément depuis la configuration s'applique au dossier en cours.
De sorte que l'autorisation de fait, l'accès aux pages est verrouillé. Maintenant, laisse envisager la navigation. L'ASP.NET navigation cadre des honneurs de l'autorisation, mais seulement si vous configurez le filtrage de la sécurité sur le fournisseur, ce qui n'est pas configuré par défaut. Cela signifie que vous devez ajouter le site de la carte de configuration web.config:
La plupart de ceci est configuré au niveau de la machine lors de l'ASP.NET est installé, mais, aussi et surtout la securityTrimmingEnabled valeur est à false par défaut. Ce qui précède n'est clairement la configuration existante et ajouter une nouvelle entrée à l'attribut défini sur true. À ce stade, l'infrastructure de navigation maintenant l'honneur les règles d'autorisation, de sorte que les éléments de menu n'apparaît pas si l'utilisateur ne dispose pas d'autorisation pour cet article; il n'a pas d'importance si vous utilisez un Menu ou d'un TreeView pour afficher les éléments de menu, l'élément crucial est l'aide de l'SiteMapDataSource (ou le plan du site de l'API si vous êtes en train de construire le menu manuellement). Si vous avez un site personnalisé fournisseur de cartes, comme une base de données gérée par (comme celui-ci sur le site MSDN), alors cela pourrait avoir à faire son propre contrôle de sécurité, mais cela dépend à qui de la classe de base dont vous héritez. C'est une autre histoire pour un autre poste si.
Donc, si vous n'avez pas besoin de modifier le plan du site, les éléments eux-mêmes, ce qui est le rôle de l'attribut? Eh bien c'est l'inverse vous attendent probablement, par l'ouverture de la visibilité du nœud, montrant le nœud si l'utilisateur est dans la rôle, même s'ils n'ont pas l'autorisation d'accéder à la page elle-même (parce que la règle d'autorisation de restreindre l'accès). Pourquoi voudriez-vous faire cela? Eh bien, vous devez comprendre comment l'ajustement de la sécurité des œuvres. Au moment de décider si un utilisateur peut voir un nœud, la demande d'autorisation et le dossier physique autorisations sont vérifiées; si échec alors le nœud est réputé inaccessible. Il y a deux très ordinaires fois lors de fichier physique vérifications échoue:
Dans ces deux cas, le fichier physique vérifications échoue si le nœud ne seront pas affichés. Par conséquent, vous pouvez avoir besoin d'ouvrir la visibilité du nœud. Par exemple, considérez les points suivants:
Ici le nœud administration ne dispose pas d'une page physique, c'est purement pour permettre à l'organisation de l'admin des objets dans leur propre sous-menu. Sans les rôles supplémentaires de l'attribut du nœud et les enfants n'apparaissent pas, mais les rôles=”Admin”, le nœud doit également être démontré que les utilisateurs dans le rôle Admin, même si l'échec de la vérification. Nous n'avons pas besoin de l'attribut sur les nœuds enfants parce qu'ils ont des pages physiques, de sorte que les vérifications des fichiers de réussira.
Donc c'est assez simple si vous vous rappelez les règles:
web.config.
le découpage.
la visibilité.
Ce que vous voulez est ce que ASP.NET se réfère à " l'Site-Carte De Filtrage De Sécurité". Vous avez déjà fait la plupart du travail - à savoir l'attribution de rôles aux nœuds dans le sitemap. Maintenant, tout ce que vous avez à faire, c'est un peu de configuration.
Dans votre
web.config
ajouter un nouveau fournisseur du plan de site à l'aide de la normeXmlSiteMapProvider
mais avecsecurityTrimmingEnabled="true"
et d'en faire le fournisseur par défaut: