ASP.NET-ben a Menu vezérlő szuperül használható a weboldal menüjének megjelenítésére. Adatait tudja például SiteMap állományokból venni, iránya mélysége beállítható. Sőt ha bekapcsolod a securityTrimminget, akkor nem mutatja meg azokat a menüpontokat, melyek mögött található oldalakat nincs jogod megnézni. A pontos működési mechanizmusáról már volt szó korábban is.
Menu + SecurityTrimming vs. külső oldalak
Tanfolyamon vettük észre, hogy ha be van kapcsolva a securityTrimming, akkor a Menu vezérlő nem jeleníti meg a kifele (például más portálokra) mutató hivatkozásokat.
Az alábbi sitemap állományból például az MSDNKK-blogra mutató menüpont nem jelenik meg, ha bekapcsolod a securityTrimminget a web.configban:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="" title="ASP.NET Menu Test Site" description="hidden"
roles="*" >
<siteMapNode url="~/Default.aspx" title="Home" description="" />
<siteMapNode url="~/Admin/" title="Admin" description="">
<siteMapNode url="~/Admin/Default.aspx" title="Admin's Home" description="" />
</siteMapNode>
<siteMapNode url="http://www.msdnkk.hu" title="MSDNKK" description="" />
<siteMapNode url="~/Login.aspx" title="Login" description="" />
</siteMapNode>
</siteMap>
A hozzá tartozó web.config részlet:
<siteMap>
<providers>
<remove name="AspNetXmlSiteMapProvider"/>
<add name="AspNetXmlSiteMapProvider"
siteMapFile="web.sitemap"
type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
securityTrimmingEnabled="true" />
</providers>
</siteMap>
Azt, hogy ez miért így működik néhány kör google után sem tudnám megmondani.
workaround
Ami viszont biztos, hogy a sitemap megfelelő siteMapNode tagjének roles="*" attribútummal való ellátása itt is segít:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="" title="ASP.NET Menu Test Site" description="hidden"
roles="*" >
<siteMapNode url="~/Default.aspx" title="Home" description="" />
<siteMapNode url="~/Admin/" title="Admin" description="">
<siteMapNode url="~/Admin/Default.aspx" title="Admin's Home" description="" />
</siteMapNode>
<siteMapNode url="http://www.msdnkk.hu" title="MSDNKK" description="" roles="*" />
<siteMapNode url="~/Login.aspx" title="Login" description="" />
</siteMapNode>
</siteMap>
Ennek hatására az MSDNKK-blogra mutató menüpont megjelenik a menüben mindenki számára.