Frage

Ich habe eine ASP.NET -Site, auf der ich versuche, Windows -Authentifizierung und Active Directory -Rollen zu verwenden, um den Zugriff auf einige Seiten zu begrenzen. Ich habe mir eine angesehen Tutorial -Seite von Scott Gu, aber ich kann nicht ganz erreichen, was ich will.

Ich ignoriere den Wurzelknoten in meinem SiteMapDataSource. Ich möchte allen Benutzern den Knoten "Dokumente" anzeigen, aber die Anzeige der "Suche" und "hochladen" Rollen auf zwei verschiedene Rollen einschränken. Ich bin in der "Domain validRole", aber nicht in der "Domain maDeuprole". Mit Sitemap und Web.config unten bekomme ich alle angezeigten Knoten. Wenn ich das entferne roles="*" Aus dem Knoten "Dokumente" (wie von Scott Gu vorgeschlagen) bekomme ich keine Knoten angezeigt.

Gibt es eine Möglichkeit, die Anzeige einzelner untergeordneter Knoten zu begrenzen, ohne benutzerdefinierten Code schreiben zu müssen?

Dies ist meine Sitemap:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
    <siteMapNode url="~/Default.aspx" 
                 title="Home">
        <siteMapNode title="Documents" roles="*">
            <siteMapNode url="~/Documents/Search.aspx" 
                         title="Search Documents" 
                         roles="DOMAIN\validrole" />
            <siteMapNode url="~/Documents/Upload.aspx" 
                         title="Upload Documents" 
                         roles="DOMAIN\madeuprole" />
            <siteMapNode url="~/Documents/Publish.aspx" 
                         title="Publish Documents" />
        </siteMapNode>
        <siteMapNode title="Users" roles="*">
            <siteMapNode url="~/Users/Search.aspx" 
                         title="Search Users" 
                         roles="DOMAIN\validrole" />
        </siteMapNode>
    </siteMapNode>
</siteMap>

Und dies ist der relevante Abschnitt meines Web.Config:

<authentication mode="Windows"/>
<authorization>
    <allow roles="DOMAIN\validrole"/>
    <deny users="*"/>
</authorization>

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
    <providers>
        <add name="XmlSiteMapProvider"
             description="Default SiteMap provider."
             type="System.Web.XmlSiteMapProvider"
             siteMapFile="Web.sitemap"
             securityTrimmingEnabled="true" />
    </providers>
</siteMap>
War es hilfreich?

Lösung

Sortiert - Sie müssen die Autorisierung auf der Seite in der Web.config -Datei wie folgt einrichten:

<location path="Documents/Upload.aspx">
    <system.web>
        <authorization>
            <allow roles="DOMAIN\madeuprole"/>
            <deny users="*"/>
        </authorization>
    </system.web>
</location>

Ich hatte das mit dem Weg versucht "~/Documents/Upload.aspx", Aber das hat nicht funktioniert - es muss relativ zur Konfigurationsdatei ein Pfad sein.

Außerdem musste ich eine URL in meine Sitemap -Knoten wie folgt einfügen:

<siteMapNode title="Documents" roles="*" url="Made-Up.aspx">

Dies hörte auf, alles zu verschwinden, obwohl ich keine Ahnung habe warum. Ich zeige die URL nicht, so dass jeder erfundene den Trick macht.

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