Frage

Ich habe eine Seite mit 2 Sektionen - einem für Kunden und einem für Administratoren im Wesentlichen. Jeder Abschnitt ist in einem eigenen Verzeichnis mit einer eigenen web.config und Sitemap. Sicherheit und Zugang funktioniert.

Wenn ich als Admin angemeldet bin, mag ich Menüpunkte sehen, die auf den anderen Abschnitt verknüpfen, jedoch. Ich fügte hinzu, Links auf die Sitemap, z.

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

Dies scheint keine Wirkung zu haben, da ich noch den Menüpunkt sehen, wenn sie als Kunde angemeldet. Wenn ich drehe auf Sicherheit Trimmen, wie 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>

alle Menüpunkte sind verschwunden.

Ich habe eigentlich web.configs sowohl in der internen als auch die Kundenordner, z.B. für die Kunden:

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

und der Administrator:

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

Auch hier Genehmigung arbeitet, und wenn ich als Kunde bin angemeldet und ich auf dem internen Website Link im Menü klicken, ich werde auf die Login-Seite umgeleitet. Als admin, kann ich auf die Admin-Seite durchklicken. Sobald ich die Sicherheitsfunktion einschalten für die Sitemap Anbieter Trimmen, die die Links ergreifen soll, die ich nicht für von der Speisekarte bin berechtigt, verschwindet das gesamte Menü. Was vermisse ich? Muss ich die asp.menu Kontrolle konfigurieren, um mit diesen zusammen zu arbeiten?

Update: Ich habe eine Prämie auf diese Frage stellen, denn ich kann es immer noch nicht an die Arbeit. Wir neigen dazu, die Menüsteuerung zu werfen und unsere eigenen zu schreiben, aber wenn jemand einen Hinweis liefern, dass natürlich wäre bevorzugt. Auch hier - das Problem ist nicht mit Sicherheit - die Rollen und Zugriffsregeln wie erwartet. Es ist mit der Menüsteuerung und Sicherheits Besatz. Das Menü verschwindet alltogether, wenn die Sicherheit Trimmen für eine Sitemap aktiviert.

Update: Vielen Dank für die Suche nach dieser Blog-Post, Pavel. Was ich daraus gelernt habe, ist, dass wenn es Sitemap Einträge sind, die keinen Pfad und URL haben (was für einige meiner Untermenüs auch wahr ist), kann die Steuerung nicht schließen, Berechtigungen von den Einstellungen in der web.config, und Sie müssen geben Sie die Rollen in der Sitemap. Andernfalls werden sie standardmäßig ausgeblendet werden.

War es hilfreich?

Lösung

Von Horizontal Menu verschwindet mit securityTrimmingEnabled =" true ":

  

Stellen Sie sicher, dass jede Rolle Zugriff hat   an den (nicht verwendete) dummy siteMapNode an   die Wurzel von Rollen einschließlich = „*“ in   Web.sitemap unten dargestellt:

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

Andere Tipps

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

Überprüfen der angemeldete Benutzer die Administratorrolle.

Edit:

Ich bin auch ziemlich sicher, dass Ihr nicht die Rolle in der siteMapNode angeben ment an. Ich glaube rollenbasierte Aufstellungsortdiagramme bestehende Rollen abarbeiten, zB wenn ein Benutzer Zugriff auf den Pfad hat, dass die Website zur Kenntnis specifys dann wird es es angezeigt werden soll.

Auch den Pfad in der webs.config angeben.

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

Und entfernen Sie schließlich die ‚~‘ von Ihrer Website Karte, so dass der Vergleich entspricht.

Sobald dies alles getan ist, und wenn dies immer noch nicht funktioniert, verschmelzen die web.configs zu machen sind sicher permisions nicht verloren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top