Конечно, вы можете определить SiteMapProvider в вашем web.config и использовать свойство CurrentNode, чтобы связать SiteMapNode с запрашиваемой страницей.
Сначала объявите вашего провайдера карты сайта (web.config):
<siteMap enabled="true" defaultProvider="DefaultXmlSiteMapProvider">
<providers>
<add siteMapFile="Web.sitemap" name="DefaultXmlSiteMapProvider" securityTrimmingEnabled="true" type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</siteMap>
Пример кода для управления доступом к странице с помощью CurrentNode (вы можете сделать это лучше;)):
bool hasAccess = false;
if (SiteMap.CurrentNode == null)
throw new ApplicationException("Page not present in SiteMap : " + this.Request.Url.AbsolutePath);
if (SiteMap.CurrentNode.Roles.Count > 0)
{
// All roles or no roles
if (SiteMap.CurrentNode.Roles.Contains("*") == true)
{
hasAccess = true;
}
else
{
for (int index = 0; index < SiteMap.CurrentNode.Roles.Count; index++)
{
string role = SiteMap.CurrentNode.Roles[index].ToString();
hasAccess = HttpContext.Current.User.IsInRole(role);
if (hasAccess == true)
break;
}
}
}
Примечание. Я добавил роль каждого (*), очень полезную.