Question

Voici l'aperçu

  1. Créer des adhésions
  2. Créer des rôles
  3. Créer un sitemap (modifier pour utiliser roles="admin")
  4. Créer un menu et lier web.sitemap au menu, en utilisant la nouvelle source de données de la balise active du menu
  5. Modifiez web.config pour activer securityTrimmingEnabled

Cela fonctionne comme ça.Si j'attribue un rôle au nœud racine dans le plan du site, le menu est correctement masqué pour tous les autres rôles, à l'exception des rôles auxquels il est attribué.

Si j'utilise role dans l'un des sous-menus, cela ne fonctionne pas.Quelqu'un a-t-il une idée de pourquoi?

web.sitemap

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode roles="*"> <--------------- Roles Works here
  <siteMapNode title="Home" url="~/Default.aspx" roles="admin"></siteMapNode> <-------- But not here
<siteMapNode title="Videos" url="~/Tags.aspx" />
<siteMapNode title="Student" url="~/MemberList.aspx" roles="student"/>
<siteMapNode title="My Page" url="~/MyPage.aspx" />
<siteMapNode title="My Recent Views" url="~/RecentViews.aspx" />
<siteMapNode title="Upload a Video" url="~/Upload.aspx" />
  <siteMapNode title="Administer Users" url="~/AdministerUsers.aspx" roles="admin">
      <siteMapNode title="Creat user" url="createUser.aspx"></siteMapNode>
  </siteMapNode>
</siteMapNode>
</siteMap>

Fichier web.config (modification)

<siteMap enabled="true">
    <providers>
        <clear/>
        <add siteMapFile="Web.sitemap" name="AspNetXmlSiteMapProvider" type="System.Web.XmlSiteMapProvider" securityTrimmingEnabled="true"/>
    </providers>
</siteMap>
Était-ce utile?

La solution

Vous voudrez peut-être consulter ce lien: http://blogs.msdn.com/b/dannychen/archive/2006/03/16/553005.aspx .La fonctionnalité de coupures de sécurité d'ASP.Net est l'une des fonctionnalités les plus souvent mal comprises.

L'idée de base est que les ajustements de sécurité sont appliqués via la balise <authorization> dans web.config, et non via les rôles dans siteMap.La propriété roles dans le plan du site ne peut qu' élargir la sécurité, pas la restreindre.Par exemple, voici comment appliquer réellement la règle des rôles étudiants pour ~ / MemberList.aspx:

<location path="~/MemberList.aspx">
  <system.web>
    <authorization>
      <allow roles="Student" />
      <deny users="*" />
    </authorization>
  </system.web>
</location>

Cela ne fera pas seulement disparaître le lien de votre menu, cela rendra en fait la page impossible à visiter par quelqu'un qui ne joue pas le rôle d'étudiant, même s'il tape l'URL directement dans le navigateur.Sans la balise <authorization>, il sera toujours possible de saisir directement l'url et de toujours voir la page.

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