Question

J'ai un site avec 2 sections - une pour les clients et une pour les administrateurs, en substance. Chaque section est dans son propre répertoire avec ses propres web.config et sitemap. La sécurité et l'accès fonctionnent bien.

Cependant, lorsque je suis connecté en tant qu'administrateur, je souhaite voir les éléments de menu liés à l'autre section. J'ai ajouté des liens vers le plan du site, par exemple:

<siteMapNode url="~/Customer/Default.aspx?3" title="Customer Site"
description="Switch to customer site" roles="Administrator"/>

Cela semble n'avoir aucun effet, car je vois toujours l'élément de menu une fois connecté en tant que client. Lorsque j'active le découpage de sécurité, comme dans

<siteMap enabled="true">
  <providers>
    <add name="InternalSiteMap" type="System.Web.XmlSiteMapProvider" 
        siteMapFile="~/Internal/Internal.sitemap" />
    <add name="CustomerSiteMap" type="System.Web.XmlSiteMapProvider" 
     siteMapFile="~/Customer/Customer.sitemap" securityTrimmingEnabled="true" />
  </providers>
</siteMap>

tous les éléments de menu ont disparu.

J'ai en fait des.configs web dans les dossiers interne et client, par exemple. pour le client:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <authorization>
      <allow roles="Customer" />
      <deny users="*" />
    </authorization>
  </system.web>
</configuration>

et l'administrateur:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
        <authorization>
            <allow roles="Administrator" />
            <deny users="*" />
        </authorization>
    </system.web>
</configuration>

Encore une fois, l'autorisation fonctionne et lorsque je suis connecté en tant que client et que je clique sur le lien du site interne dans le menu, je suis redirigé vers la page de connexion. En tant qu'administrateur, je peux cliquer sur le site d'administration. Dès que j'active le rognage de sécurité pour le fournisseur de plan de site, qui est supposé supprimer les liens pour lesquels je ne suis pas autorisé, le menu entier disparaît. Qu'est-ce que je rate? Dois-je configurer le contrôle asp.menu pour fonctionner avec cela?

Mise à jour: Je mets un prix en prime pour cette question, car je ne parviens toujours pas à la faire fonctionner. Nous sommes enclins à jeter le contrôle du menu et à écrire le nôtre, mais si quelqu'un peut nous donner un indice, cela serait préférable. Encore une fois - le problème ne vient pas de la sécurité - les règles de rôles et d’accès fonctionnent comme prévu. C’est avec le contrôle du menu et le réglage de sécurité. Le menu disparaît complètement lorsque le découpage de sécurité est activé pour un sitemap.

Mise à jour: Merci d'avoir trouvé ce blog, Pavel. Ce que j’ai appris de cela, c’est que s’il existe des entrées de sitemap qui n’ont pas de chemin d'accès ni d'URL (ce qui est également vrai pour certains de mes sous-revenus), le contrôle ne peut pas déduire des autorisations à partir des paramètres de web.config, et vous devez spécifiez les rôles dans le plan du site. Sinon, ils seront masqués par défaut.

Était-ce utile?

La solution

De Le menu horizontal disparaît avec securityTrimmingEnabled =" true ":

  

Assurez-vous que tous les rôles ont accès.   vers le site factice (non utilisé) siteMapNode à l'adresse   la racine en incluant les rôles = " * " dans   web.sitemap affiché ci-dessous:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap  enableLocalization="true"
     xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="" title="" roles="*"  description="">
      <siteMapNode url="~/default.aspx" resourceKey="siteMapHome" 
       title="Home" roles="admin,account" description="" />
<!-----More nodes-->

Autres conseils

http://www.vbforums.com/showthread.php?p=3625975

Vérifiez que l'utilisateur connecté a le rôle d'administrateur.

Modifier:

Je suis également à peu près sûr que vous ne préciserez pas le rôle dans le siteMapNode. Je pense que les cartes de site basées sur les rôles fonctionnent à partir des rôles existants, par exemple si un utilisateur a accès au chemin spécifié par la note de site, il l'affichera.

Spécifiez également le chemin d'accès dans le fichier webs.config.

<location path="admin/">
    <system.web>
        <authorization>
            <allow roles="Admin"  />
            <deny users="*"/>
        </authorization>
    </system.web>
</location>

Enfin, supprimez le "~" de la carte de votre site afin que la comparaison soit identique.

Une fois que tout cela est fait et si cela ne fonctionne toujours pas, fusionnez les web.configs pour vous assurer que les autorisations ne sont pas perdues.

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