显示/隐藏基于Roles / Web.sitemap文件的自定义菜单项

时间:2010-03-12 08:56:20

标签: asp.net menu security-roles sitemapprovider security-trimming

我有一个自定义菜单,它利用了标准的asp.net站点地图。它运行良好,但我的一些页面是由URL重写器动态生成的,因此它们不会位于站点地图XML文件中。目前,我推出了一个自定义解决方案,通过CSS类显示/隐藏菜单项,并对用户所在角色进行编程检查。直到我访问站点地图文件中不存在的动态页面时,它才能正常工作。我已尝试使用安全修整的站点地图文件中的“角色”属性,但由于我有自定义菜单,因此无效。

有没有办法可以利用站点地图文件中的roles属性来显示/隐藏下面的自定义控件的菜单项,即使某些页面不在站点地图中?我的菜单控制在......

之下
<div class="menu">
<ul>
    <asp:Repeater ID="rpt" runat="server" DataSourceID="smdsMenuPrimary" 
        EnableViewState="False">
        <ItemTemplate>                
            <li class="<%#GetDisplayClass((SiteMapNode)Container.DataItem)%>"><a href='<%# ((SiteMapNode)Container.DataItem).Url %>'><%# ((SiteMapNode)Container.DataItem).Title %></a></li>                
        </ItemTemplate>
    </asp:Repeater>
</ul>

1 个答案:

答案 0 :(得分:0)

您可以使用 UrlAuthorizationModule.CheckUrlAccessForPrincipal (路径)来测试站点地图中的每个网址 - 如果用户有权访问路径(文件或文件夹),则此方法返回true,否则返回false。