Domanda

Ho un sito con 2 sezioni: una per i clienti e una per gli amministratori, in sostanza. Ogni sezione è nella propria directory con il proprio web.config e sitemap. La sicurezza e l'accesso funzionano bene.

Quando eseguo l'accesso come amministratore, voglio comunque vedere le voci di menu che rimandano all'altra sezione. Ho aggiunto collegamenti alla Sitemap, ad esempio:

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

Questo sembra non avere alcun effetto, poiché vedo ancora la voce di menu quando accedo come cliente. Quando accendo il controllo di sicurezza, come in

<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>

tutte le voci di menu sono sparite.

In realtà ho web.configs nelle cartelle Internal e Customer, ad es. per il cliente:

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

e l'amministratore:

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

Ancora una volta, l'autorizzazione funziona e quando accedo come cliente e faccio clic sul collegamento al sito interno nel menu, vengo reindirizzato alla pagina di accesso. Come amministratore, posso fare clic sul sito di amministrazione. Non appena accendo il controllo di sicurezza per il fornitore di sitemap, che dovrebbe prendere i collegamenti per i quali non sono autorizzato fuori dal menu, l'intero menu scompare. Cosa mi sto perdendo? Devo configurare il controllo asp.menu per lavorare insieme con questo?

Aggiornamento: ho messo una taglia su questa domanda, perché ancora non riesco a farlo funzionare. Siamo propensi a buttare fuori il controllo del menu e scrivere il nostro, ma se qualcuno può fornire un suggerimento, sarebbe preferibile ovviamente. Ancora una volta - il problema non riguarda la sicurezza - i ruoli e le regole di accesso funzionano come previsto. È con il controllo del menu e il taglio della sicurezza. Il menu scompare del tutto quando viene attivato il taglio di sicurezza per una Sitemap.

Aggiornamento: grazie per aver trovato questo post sul blog, Pavel. Ciò che ho imparato da questo è che se ci sono voci sitemap che non hanno un percorso e un URL (che è vero anche per alcuni dei miei sottomenu), il controllo non può inferire le autorizzazioni dalle impostazioni in web.config, e devi specifica i ruoli nella Sitemap. Altrimenti, saranno nascosti per impostazione predefinita.

È stato utile?

Soluzione

Da Il menu orizzontale scompare con securityTrimmingEnabled = " true " :

  

Assicurati che ogni ruolo abbia accesso   al sito fittizio (non utilizzato) MapNode a   la radice includendo ruoli = " * " nel   mappa web mostrata di seguito:

<?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-->

Altri suggerimenti

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

Verifica che l'utente che ha effettuato l'accesso abbia il ruolo di amministratore.

Modifica:

Sono anche abbastanza sicuro che tu non abbia specificato di specificare il ruolo in siteMapNode. Credo che le mappe del sito basate sui ruoli lavorino su ruoli esistenti, ad esempio se un utente ha accesso al percorso specificato dalla nota del sito, lo visualizzerà.

Specifica anche il percorso in webs.config.

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

E infine rimuovi '~' dalla mappa del tuo sito in modo che il confronto corrisponda.

Una volta fatto tutto e se non funziona ancora, unisci i web.configs per assicurarti che le autorizzazioni non vengano perse.

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