보안이 사이트 맵을 트리밍 할 때 단일 자식 노드에 영향을 미치는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1807624

문제

ASP.NET 사이트가 있는데, 여기에는 일부 페이지에 대한 액세스를 제한하기 위해 Windows 인증 및 Active Directory 역할을 사용하려고합니다. 나는 a를 보았다 Scott Gu의 튜토리얼 페이지, 그러나 나는 내가 원하는 것을 성취 할 수 없습니다.

나는 내 근절의 루트 노드를 무시하고있다 SiteMapDataSource. 모든 사용자에게 "문서"노드를 표시하고 싶지만 "검색"및 "업로드"역할을 두 가지 역할로 표시하는 것을 제한하고 싶습니다. 나는 "domain extalrole"에 있지만 "도메인 madeuprole"에 있지 않습니다. 아래의 siteemap과 web.config를 사용하면 모든 노드가 표시됩니다. 내가 제거하면 roles="*" "문서"노드 (Scott Gu가 제안한대로)에서 노드가 표시되지 않습니다.

사용자 정의 코드를 작성하지 않고도 개별 자식 노드의 표시를 제한 할 수있는 방법이 있습니까?

이것은 내 사이트 맵입니다 :

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

그리고 이것은 내 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>
도움이 되었습니까?

해결책

정렬 - Web.Config 파일의 페이지에 인증을 설정해야합니다.

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

나는 길로 이것을 시도했다 "~/Documents/Upload.aspx", 그러나 그것은 작동하지 않았습니다. 구성 파일과 관련된 경로 여야합니다.

또한 사이트 맵 노드에 URL을 넣어야했습니다.

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

왜 그런지 모르겠지만 모든 것이 사라지는 것을 막았습니다. URL을 표시하지 않으므로 메이크업이 트릭을 수행합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top