Как повлиять на одиночные дочерние узлы, когда безопасность подрезает SiteMap? - PullRequest
1 голос
/ 27 ноября 2009

У меня есть сайт ASP.Net, на котором я пытаюсь использовать проверки подлинности Windows и роли Active Directory для ограничения доступа к некоторым страницам. Я посмотрел на учебную страницу от Скотта Гу , но я не могу достичь того, чего хочу.

Я игнорирую корневой узел в моем SiteMapDataSource. Я хочу показать узел «Документы» всем пользователям, но ограничить отображение ролей «Поиск» и «Загрузка» двумя различными ролями. Я нахожусь в "DOMAIN \ validroll", но не в "DOMAIN \ madeuprole". С картами сайта и web.config ниже, я получаю все отображаемые узлы. Если я удаляю roles="*" из узла «Документы» (как предложил Скотт Гу), я не получаю отображаемых узлов.

Есть ли способ ограничить отображение отдельных дочерних узлов без необходимости написания собственного кода?

Это моя карта сайта:

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

1 Ответ

1 голос
/ 27 ноября 2009

Sorted - вам нужно настроить авторизацию для страницы в файле 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, поэтому любой придуманный делает свое дело.

...