Как повлиять на одиночные дочерние узлы, когда безопасность подрезает SiteMap?
-
05-07-2019 - |
Вопрос
У меня есть сайт ASP.Net, на котором я пытаюсь использовать роли проверки подлинности Windows и Active Directory для ограничения доступа к некоторым страницам. Я посмотрел на страница учебника от Скотта Гу , но я не могу добиться того, чего хочу.
Я игнорирую корневой узел в моем SiteMapDataSource
. Я хочу показать " Документы " узел для всех пользователей, но ограничить отображение " Поиск " и " Загрузить " роли в 2 разных ролях. Я в "DOMAIN \ validrole" но не в разделе "ДОМЕН \ madeuprole". С картами сайта и web.config ниже, я получаю все отображаемые узлы. Если я удалю role = " * "
из " Documents " узел (как предложил Скотт Гу), я не получаю отображаемых узлов.
Есть ли способ, которым я могу ограничить отображение отдельных дочерних узлов без необходимости писать собственный код?
Это моя карта сайта:
<?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, поэтому любой придуманный делает свое дело.