首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

16.9  安全补偿

如果读者完成了本章前面的示例,就会注意到,<siteMapNode>标记有一个属性我们还没有探讨,即role属性。这个属性很强大,它可以为包含在导航系统中的项提供授权模型。也就是说,可以只向有特定权限的用户显示导航项。这个操作一般使用术语“安全补偿(security trimming)”。本节就介绍如何把安全补偿功能应用于在ASP.NET 2.0中建立的应用程序。

这个功能是两个ASP.NET 2.0系统在站点导航系统中彼此交互的一个实例。只有激活ASP.NET 2.0角色管理系统,安全补偿功能才起作用。角色管理系统详见第18章。一定要阅读这一章,因为本节不详细探讨这个新系统。

为了说明安全补偿功能在ASP.NET应用程序中的作用,本节将介绍如何只允许包含在指定应用程序角色中的用户访问应用程序的管理系统。

16.9.1  启动管理员的角色管理功能

首先,建立应用程序,以处理角色。这是一个相当简单的任务。为此,一种简便的方法是为应用程序打开ASP.NET Web Site Administration Tool,在这个基于Web的工具中激活角色管理功能。要打开这个管理工具,可以在VS的Solution Explorer菜单中单击ASP.NET Configuration按钮。这个按钮的图标是一个锤子和一个球体。

启动ASP.NET Web Site Administration Tool后,选择Security选项卡,这显示一个屏幕,在该屏幕上可以为应用程序启动成员和角色管理系统。

首先,激活并启动角色管理系统,再激活成员系统。成员系统详见第18章。打开成员系统后,在应用程序中建立一些用户。如果一个用户登录到应用程序中,就给他赋予一个指定的角色。这个角色赋予操作会改变角色导航系统的显示。

ASP.NET Web Site Administration Tool的Security选项卡如图16-35所示。

在这个页面上,选择Enable roles链接,就启动了角色管理系统。之后,页面会告知我们,该系统中没有规则。要为站点导航系统创建需要的角色,可选择Create or Manage roles链接。这会显示一个页面,在其中可以创建管理员角色。对于这个例子,将角色命名为Admin。

添加了Admin角色后,单击Back按钮,选择应用程序使用的验证类型。应确保选择了From the internet选项,这样就可以在系统中创建用户了。在默认情况下,创建的用户保存在ASP.NET在应用程序中创建的Microsoft SQL Server Express Edition文件中。选择了验证类型后,就可以创建新用户了,在创建用户的屏幕上复选Admin角色,就可以把该用户放在Admin角色中。

之后,就可以检查web.config文件中设置的值,如程序清单16-33所示。

图  16-35

程序清单16-3  在web.config文件中启动角色管理系统

<configuration>

  <system.web>

    <authentication mode="Forms" />

    <roleManager enabled="true" />

  </system.web>

</configuration>

16.9.2  建立管理员的配置段

下一步是为管理员建立一个页面。这个例子把该页面命名为AdminOnly.aspx,它只包含一个简单的字符串值,表示欢迎管理员进入本页面。只有包含在Admin角色中的用户才能锁定该页面。为此,要在web.config文件中设置相应的值,如程序清单16-34所示。

程序清单16-34  在web.config文件中锁定AdminOnly.aspx页面

<configuration>

  <location path="AdminOnly.aspx">

  <system.web>

    <authorization>

      <allow roles="Admin" />

      <deny users="*" />

    </authorization>

  </system.web>

</location>

</configuration>

现在,AdminOnly.aspx页面只能由Admin角色中的用户访问,所以下一步是允许用户登录应用程序。为此,应用程序的演示版本创建了一个Default.aspx页面,它包含一个Login服务器控件和绑定到SiteMapDataSource控件的TreeView控件。这个简单的Default.aspx页面如程序清单16-35所示。

程序清单16-35  Default.aspx页面

<%@ Page Language="VB" %>

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>Main Page</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <asp:Login ID ="Login1" runat="server"></asp: Login><br />

        <asp:TreeView ID ="TreeView1" runat="server"

               DataSourceID="SiteMapDataSource1" ShowLines="True">

        </asp:TreeView><br />

        <asp:SiteMapDataSource  ID="SiteMapDataSource1" runat="server" />

    </div>

    </form>

</body>

</html>

有了Default.aspx页面后,就要对程序清单16-1中的web.sitemap文件进行另一处修改。这个例子需要添加一个<siteMapNode>元素,以使用新的AdminOnly.aspx页面。该节点如下所示:

<siteMapNode title="Administration" description="The Administors page"

url="AdminOnly.aspx" roles="Admin" />

应用程序中的所有项都添加进来后,就要为站点导航系统启用安全补偿功能了。

16.9.3  启用安全补偿功能

在默认情况下,安全补偿功能是禁用的。即使在web.config文件的<siteMapNode>元素中应用了roles属性值,安全补偿功能也是不能工作的。要启用安全补偿功能,必须调整站点导航系统的提供程序声明。

要对XmlSiteMapProvider进行需要的修改,应在配置链的高端进行这些修改,例如修改machine.config或默认的web.config文件,也可以在低端进行修改,例如修改应用程序的web.config文件。本例中修改web.config文件。

为了在web.config文件中修改XmlSiteMapProvider,首先要清除已声明的实例,之后,重新声明XmlSiteMapProvider的一个新实例,但这次要启用安全补偿功能,如程序清单16-36所示。

程序清单16-36  启用提供程序中的安全补偿功能

<configuration>

<system.web>

<siteMap>

     <providers>

        <clear />

        <add siteMapFile="web.sitemap" name = "AspNetXmlSiteMapProvider"

       type = “System.Web.XmlSiteMapProvider,

 System.Web, Version=2.0.0.0, Culture = neutral,

PublicKeyToken=b03f5f7f11d50a3a"

securityTrimmingEnabled="true" />

     </providers>

</sitemap>

</system.web>

</configuration>

从本例可以看出,定义了一个新的XmlSiteMapProvider,其securityTrimmingEnabled属性设置为true(粗体显示)。启用了安全补偿功能后,就可以在站点导航系统中使用<siteMapNode>元素中的roles属性了。

下面进行测试。运行Default.aspx页面,首先显示的页面不包含到页面的管理部分的链接,如图16-36所示。

图  16-36

在这个图中,TreeView控件中没有显示Administration链接。然后使用Admin角色包含的用户身份登录到应用程序中,就会看到,站点导航系统已改变,反映了用户的角色,如图16-37所示。

图  16-37

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论