Domanda

Ecco la panoramica

  1. Crea abbonamenti
  2. Crea ruoli
  3. Crea SiteMap (Modify to Utilizzare ruoli = "admin")
  4. Crea menu e bind web.SiteMap al menu, utilizzando nuovi dati da dati dal tag smart del menu
  5. Modifica Web.Config per abilitare SecurityTrimmingEnabled

Funziona così. Se assegno un ruolo al nodo radice in Sitemap, il menu è corretto nascosto per tutti gli altri ruoli tranne i ruoli a cui viene assunto.

Se uso il ruolo in uno dei sottomenu, non funziona. Qualcuno ha un indizio perché?

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>

file web.config (modifica)

<siteMap enabled="true">
    <providers>
        <clear/>
        <add siteMapFile="Web.sitemap" name="AspNetXmlSiteMapProvider" type="System.Web.XmlSiteMapProvider" securityTrimmingEnabled="true"/>
    </providers>
</siteMap>
È stato utile?

Soluzione

Potresti voler controllare questo link: http://blogs.msdn.com/b/dannychen/archive/2006/03/16/553005.aspx. La funzione di rifiniture di sicurezza di ASP.NET è una delle funzionalità più spesso fraintese.

L'idea di base è che le guarnizioni della sicurezza vengono applicate attraverso <authorization> Tag in web.config, non attraverso i ruoli in Sitemap. La proprietà dei ruoli nella sitemap può solo allargare sicurezza, non restringerla. Quindi, ad esempio, ecco come applicheresti davvero la regola dei ruoli degli studenti per ~/memberList.aspx:

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

Questo non solo farà scomparire il link dal tuo menu, ma renderà effettivamente la pagina impossibile da visitare da qualcuno non nel ruolo dello studente, anche se digitano l'URL direttamente nel browser. Senza il <authorization> Tag, sarà sempre possibile digitare direttamente l'URL e vedere ancora la pagina.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top