基于角色的菜单不起作用,我做错了什么?

时间:2011-06-16 13:56:49

标签: asp.net securitytrimmingenabled

以下是概述

  1. 创建会员资格
  2. 创建角色
  3. 创建站点地图(修改为使用roles =“admin”)
  4. 使用菜单智能标记
  5. 中的新数据源创建菜单并将web.sitemap绑定到菜单
  6. 修改web.config以启用securityTrimmingEnabled
  7. 它的工作原理如下。如果我将一个角色分配给站点地图中的根节点,则除了所属角色之外的所有其他角色都会正确隐藏该菜单。

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

    的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>
    

1 个答案:

答案 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>标记,则始终可以直接输入网址并仍然可以看到该网页。