在我的web.config中,我使用securityTrimmingEnabled="true"
配置了SiteMapProvider,并在我的主母版页上绑定了asp:Menu
asp:SiteMapDataSource
。另外,我已经配置了对子文件夹“Admin”中所有页面的限制访问(使用此子文件夹中的另一个web.config)。
如果我将sitemapNode放在Web.sitemap
...
<siteMapNode url="~/Admin/Default.aspx" title="Administration" description="" >
...只有角色“Admin”中的用户才会拥有与该siteMapNode相关的菜单项。所以这个工作正常并且符合预期。
现在我已在Global.asax中定义了一个URL路由,以将物理文件映射到新URL:
System.Web.Routing.RouteTable.Routes.MapPageRoute("AdminHomeRoute",
"Administration/Home", "~/Admin/Default.aspx");
但是当我在SiteMap文件中使用这个route-URL时......
<siteMapNode url="Administration/Home" title="Administration" description="" >
...安全修整似乎不起作用:菜单项对所有用户都可见。 (但仍然限制对页面的访问,因此非管理员用户选择菜单项不会导航到受限页面。)
问题:到目前为止,我是否有任何设置可以使用ASP.NET 4.0 Web窗体中的URL路由进行安全修整?我做错什么了吗?有没有解决办法?
谢谢你的帮助!
答案 0 :(得分:1)
我在ASP.NET论坛(http://forums.asp.net/t/1563781.aspx)上回答了这个问题,但答案是肯定的。但是,您可以自定义提供程序;请参阅论坛帖子中的代码。