Посмотрите на securityTrimmingEnabled="true"
, вот несколько ссылок:
В общем, используя этот параметр, вы включаете проверку, разрешено ли роли текущего пользователя посещать текущий узел карты сайта.
Web.config:
<siteMap defaultProvider="MySiteMapProvider" enabled="true">
<providers>
<clear />
<add name="MySiteMapProvider" type="My.XmlSiteMapProvider" siteMapFile="Web.sitemap" securityTrimmingEnabled="true" />
</providers>
</siteMap>
Web.sitemap:
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
<siteMapNode url="Default.aspx" title="Main" roles="*">
<siteMapNode url="Admin.aspx" title="Admin" roles="admin" />
</siteMapNode>
</siteMap>
Поставщик нестандартной карты сайта:
namespace My
{
public class XmlSiteMapProvider : System.Web.XmlSiteMapProvider
{
public override bool IsAccessibleToUser(HttpContext context, SiteMapNode node)
{
if (node.Roles.OfType<string>().Any(r => String.Equals(r, "*", StringComparison.Ordinal) || context.User.IsInRole(r)))
{
return true;
}
else
{
throw new My.InsufficientRightsException();
}
}
}
}