以下是概述
它的工作原理如下。如果我将一个角色分配给站点地图中的根节点,则除了所属角色之外的所有其他角色都会正确隐藏该菜单。
如果我在其中一个子菜单中使用角色,则它不起作用。有没有人知道为什么?
的web.sitemap
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode roles="*"> <--------------- Roles Works here
<siteMapNode title="Home" url="~/Default.aspx" roles="admin"></siteMapNode> <-------- But not here
<siteMapNode title="Videos" url="~/Tags.aspx" />
<siteMapNode title="Student" url="~/MemberList.aspx" roles="student"/>
<siteMapNode title="My Page" url="~/MyPage.aspx" />
<siteMapNode title="My Recent Views" url="~/RecentViews.aspx" />
<siteMapNode title="Upload a Video" url="~/Upload.aspx" />
<siteMapNode title="Administer Users" url="~/AdministerUsers.aspx" roles="admin">
<siteMapNode title="Creat user" url="createUser.aspx"></siteMapNode>
</siteMapNode>
</siteMapNode>
</siteMap>
web.config文件(修改)
<siteMap enabled="true">
<providers>
<clear/>
<add siteMapFile="Web.sitemap" name="AspNetXmlSiteMapProvider" type="System.Web.XmlSiteMapProvider" securityTrimmingEnabled="true"/>
</providers>
</siteMap>
答案 0 :(得分:5)
您可能需要查看此链接:http://blogs.msdn.com/b/dannychen/archive/2006/03/16/553005.aspx。 ASP.Net的安全修整功能是最常被误解的功能之一。
基本思想是安全修整通过web.config中的<authorization>
标记应用,而不是通过siteMap中的角色应用。站点地图中的roles属性只能加宽安全性,而不是缩小它。例如,以下是如何真正应用〜/ MemberList.aspx的学生角色规则:
<location path="~/MemberList.aspx">
<system.web>
<authorization>
<allow roles="Student" />
<deny users="*" />
</authorization>
</system.web>
</location>
这不仅会使链接从您的菜单中消失,而且实际上会使不在Student角色中的人无法访问该页面,即使他们直接在浏览器中输入该URL也是如此。如果没有<authorization>
标记,则始终可以直接输入网址并仍然可以看到该网页。