0

这是概述

  1. 创建会员资格
  2. 创建角色
  3. 创建站点地图(修改为使用角色=“管理员”)
  4. 使用菜单智能标签中的新数据源创建菜单并将 web.sitemap 绑定到菜单
  5. 修改 web.config 以启用 securityTrimmingEnabled

它是这样工作的。如果我将角色分配给站点地图中的根节点,则菜单对于除分配给它的角色之外的所有其他角色都是正确隐藏的。

如果我在其中一个子菜单中使用角色,它就不起作用。有谁知道为什么?

网站地图

<?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>
4

1 回答 1

5

您可能想查看此链接:http: //blogs.msdn.com/b/dannychen/archive/2006/03/16/553005.aspx。ASP.Net 的安全修整功能是最常被误解的功能之一。

基本思想是通过<authorization>web.config 中的标签应用安全修整,而不是通过站点地图中的角色。站点地图中的角色属性只能扩大安全性,不能缩小安全性。因此,例如,您将如何真正为 ~/MemberList.aspx 应用学生角色规则:

<location path="~/MemberList.aspx">
  <system.web>
    <authorization>
      <allow roles="Student" />
      <deny users="*" />
    </authorization>
  </system.web>
</location>

这不仅会使链接从您的菜单中消失,实际上还会使非学生角色的人无法访问该页面,即使他们直接在浏览器中键入了 URL。没有<authorization>标签,总是可以直接输入 url 并且仍然可以看到页面。

于 2011-06-16T14:11:26.840 回答