厄介な問題があり、解決策の始まりが見つからないので、助けていただければ幸いです。
各ノードにロールが定義されたサイトマップがあります。
<?xml version="1.0" encoding="utf-8"?>
<siteMap enableLocalization="true">
<siteMapNode title="" url="" roles="">
<siteMapNode title="default" url="~/Default.aspx" roles="user" />
<siteMapNode title="supervision" url="~/EcranSupervision.aspx" roles="Admin" />
<siteMapNode title="exploitation" url="~/ChaineTraitementList.aspx" roles="Admin" />
</siteMapNode>
</siteMap>
そして、web.config でセキュリティを有効にし、カスタム プロバイダーを使用します。
<siteMap defaultProvider="MainMenuSitemap">
<providers>
<add name="MainMenuSitemap" type="UbiXmlSiteMapProvider" siteMapFile="Web.sitemap" securityTrimmingEnabled="true" />
</providers>
</siteMap>
私のプロバイダーでは、 IsAccessibleToUser をオーバーライドしてロジックを実行するだけです:
public class UbiXmlSiteMapProvider : XmlSiteMapProvider
{
public override bool IsAccessibleToUser(HttpContext context, SiteMapNode node)
{
// custom logic here
}
}
私の問題は、 IsAccessibleToUser で使用されるノードが常に「Default.aspx」という URL を持つノードであることです。したがって、それを見る役割がある場合はすべてのノードが表示され、役割がない場合はノードが表示されません。
ここで何が悪いのかわかりません。
ヒントはありますか?