演练:通过角色管理网站用户

更新:2007 年 11 月

许多 ASP.NET 应用程序都涉及成员资格,它们对用户进行身份验证以允许用户访问受限制的资源(如仅允许成员访问的页)。如果应用程序将支持若干用户,或如果用户列表可能随时间的推移而更改,则请考虑建立角色以管理用户访问。“角色”是组(如管理人员、销售人员或成员组)的名称。建立角色后,可以将各个用户分配到角色。然后,可以向角色授予权限,该角色中的每个用户都继承已分配的权限。因此,角色是管理用户组的权限的有效方法。

通过此演练,您将学会如何执行以下任务:

  • 为应用程序建立角色。

  • 将用户分配到角色。

  • 创建规则(权限),以便针对不同规则有选择地授予或拒绝对页的访问。

  • 以编程方式确定用户是否属于特定角色以及当前用户属于哪个角色。

先决条件

若要完成本演练,您需要:

  • Visual Studio。

  • .NET Framework。

  • IIS 已在本地安装在您的计算机上。

  • SQL Server Express Edition 已在本地安装在计算机上。

  • 标识各个用户的方式。

    说明:

    在工作应用程序中,可以通过各种方法标识用户,例如通过他们的 Windows 用户帐户进行标识。但是在本演练中,用户将通过登录站点标识他们自身。因此,本演练要求您拥有一个配置为使用 ASP.NET 成员资格的站点。如果您有一个已配置了成员资格的站点,则可以使用该站点作为本演练的起点。

配置网站、成员资格和角色

在使用 ASP.NET 角色前,必须有一个可用的网站并配置该网站以启用成员资格和设置用户角色。如果您已完成主题演练:创建具有成员资格和用户登录功能的网站,则可以使用在该演练中配置的网站。

如果还没有可用的网站,请使用下面的过程创建一个。否则,转到下一节“为仅允许成员访问的页创建文件夹”。

创建本地 IIS 网站

  1. 打开 Visual Studio。

  2. 在“文件”菜单上单击“新建网站”。

    “新建网站”对话框随即出现。

  3. 在“Visual Studio 已安装的模板”之下选择“ASP.NET 网站”。

  4. 在“位置”列表框中,选择“文件系统”。

  5. 单击“浏览”,然后为应用程序选择一个目录(如 C:\RolesWebSite)。

  6. 在“语言”框中,单击您想使用的编程语言。

    您选择的编程语言将是网站的默认语言,但您可以为每个页面分别设置编程语言。

  7. 在“新建网站”对话框中单击“确定”。

    Visual Web Developer 创建该网站和一个名为 Default.aspx 的新页。

为仅允许成员访问的页创建文件夹

为了使用角色,需要创建两个文件夹“MemberPages”和“GuestPages”,可以在这两个文件夹中保存具有受限制访问权限的页。

说明:

如果您在重新使用成员资格演练中的网站,则可能已拥有此文件夹,可以跳过下面的过程步骤 1。

创建具有受限制访问权限的文件夹

  1. 在“解决方案资源管理器”中,右击“网站根目录”,单击“新建文件夹”,然后将该文件夹命名为“MemberPages”。

    此文件夹将包含一个仅部分用户能够访问的页。

  2. 右击“网站根目录”,单击“新建文件夹”,然后将该文件夹命名为“GuestPages”。

    此文件夹将包含一个所有登录用户都能访问的页(匿名用户不能访问)。

为使用成员资格和角色配置网站

创建基本的网站后,可以配置该网站以使用成员资格和角色。

为使用成员资格和角色配置网站

  1. 在“网站”菜单中,单击“ASP.NET 配置”。

  2. 选择“安全”选项卡,单击“使用安全设置向导按部就班地配置安全性”的链接,然后单击“下一步”。

  3. 继续向导的步骤 2,并选择“通过 Internet”选项。

    向导会显示一个页,您可以在其中选择网站将使用的身份验证方法。

    此选项指定应用程序将使用 Forms 身份验证,其中用户将使用在本演练中稍后创建的登录页登录到应用程序。

  4. 单击“下一步”。

    该向导会显示一条消息,表明将使用“高级提供程序设置”存储用户信息。您的应用程序将使用默认提供程序,该提供程序将成员资格信息存储在网站的 App_Data 文件夹下的 SQL Server 速成版数据库文件中。

  5. 再单击“下一步”。

  6. 在“步骤 4:定义角色”中,选择“为此网站启用角色复选框,然后单击下一步”。

  7. 系统提示时,创建两个角色“members”和“guests”,然后单击“下一步”。

  8. 在“步骤 5: 添加新用户”中,创建名为“member1”、“guest1”和“memberGuest”的三个用户。

    您可以根据需要指定任意强密码,但一定要记住密码。密码必须至少为 7 个字符,并且其中至少有一个字符为非字母数字字符。对于电子邮件地址,请使用自己的邮件地址。(本演练中将不会发送电子邮件。)

    说明:

    暂时不要关闭网站管理工具。

正在创建的网站将允许用户根据他们的角色获得对不同页的访问。因此需要创建一些访问规则,确定哪些角色能够访问哪些文件夹。

设置站点文件夹的访问规则

  1. 在网站管理工具的安全向导中,单击“下一步”。

    “步骤 6: 添加新访问规则”会显示一个页,您可以在该页中创建规则,用于确定哪些角色(或用户)可以访问网站中的页。

  2. 在“为此规则选择一个目录”下面,展开根节点,然后单击“GuestPages”。

  3. 在“规则应用于”之下选择“匿名用户”。

  4. 在“权限”之下选择“拒绝”。

    您所创建的规则会拒绝匿名用户(即没有登录的用户)的访问。

  5. 单击“添加此规则”。

    新规则显示在页底部的网格中。当用户请求“GuestPages”目录中的页时,将按顺序从上到下检查这些规则,以确定是否允许用户访问该页。如果用户没有登录,则不会显示此文件夹中的页。

  6. 在“为此规则选择一个目录”下,单击“MemberPages”。

  7. 在“规则应用于”下,选择“角色”,然后在下拉列表中单击“成员”。

  8. 在“权限”之下选择“允许”。

    所创建的规则将向“members”角色中的所有用户授予对“MemberPages”文件夹的访问权限。

  9. 单击“添加此规则”。

  10. 在“为此规则选择一个目录”下,单击“MemberPages”。

  11. 在“规则应用于”之下选择“所有用户”。

  12. 在“权限”之下选择“拒绝”。

  13. 单击“添加此规则”。

    “MemberPages”文件夹的第二个规则确保除了“members”角色中的用户外,其他任何用户都不能访问该文件夹。规则按照在该网格中的显示顺序从上到下进行处理。

    第一个规则(“允许”)向名为“members”的角色中的用户授予访问权限。第二个规则(“拒绝”)拒绝其他所有用户的访问权限。可以根据应用程序需要创建任意数目的“允许”和“拒绝”规则。当用户请求“MemberPages”目录中的页时,将按从上到下的顺序应用这些规则,以确定是否允许用户访问该页。

  14. 单击“完成”返回到“安全”选项卡。

    说明:

    暂时不要关闭网站管理工具。

将用户分配到角色

必须执行最后一个配置步骤:向角色分配已创建的用户。

将用户分配到角色

  1. 在网站管理工具的“安全”选项卡上,在“用户”下单击“管理用户”。

  2. 在“guest1”所在的行中,单击“编辑角色”。

    “角色”框中填充了一列可用的角色。

  3. 选择“guests”复选框以将用户“guest1”分配给角色“guests”。

  4. 在“member1”所在的行中,单击“编辑角色”,然后将用户“member1”分配给角色“members”。

  5. 使用同样的方法将用户“memberGuest”分配给“guests”和“members”角色。

  6. 关闭网站管理工具,然后执行下面的步骤:

    1. 在解决方案资源管理器中,单击刷新图标。

    2. 在“网站”菜单上单击“ASP.NET 配置”以重新启动网站管理工具。

      这将确保关闭由网站管理工具使用的与成员资格数据库的连接。

    3. 再次关闭网站管理工具。

添加具有受限制访问权限的页

若要测试成员资格和角色设置,需要创建一种用户登录方法以便标识用户。还必须创建一些网页,以便测试已创建的访问规则。

为所有用户创建默认页

  1. 切换到 Visual Studio。

  2. 打开或切换到 Default.aspx 页,然后切换到“设计”视图。

    如果没有 Default.aspx 页,请向网站的根目录添加一个 Default.aspx 页。

    说明:

    确保将该页命名为 Default.aspx;此名称稍后将在本演练中使用。

  3. 添加一个包含文本(如“欢迎!”)的标题

  4. 在“工具箱”中,从“登录”组中将一个 LoginStatus 控件拖动到页上。

    如果用户尚未登录,则在单击时 LoginStatus 控件时会将该用户转到 Login.aspx 页。

  5. 从“工具箱”的“登录”组中,将 LoginName 控件拖动到页面上。将“FormatString”属性设置为“您好 {0}。”

    如果用户已登录,LoginName 控件将显示用户的名称。

  6. 在“工具箱”中,从“标准”组中将 HyperLink 控件拖动到页面上。在 HyperLink 控件的“属性”面板中,将 Text 属性设置为“来宾和成员”,并将 href 属性设置为“~/GuestPages/Guests.aspx”。

    说明:

    在本演练后面的部分中将创建“Guests.aspx”页。

  7. 在“工具箱”中,从“标准”组中将另一个 HyperLink 控件拖动到页面上。在 HyperLink 控件的“属性”面板中,将 Text 属性设置为“成员”,并将 href 属性设置为“~/MemberPages/Members.aspx”。

    说明:

    在本演练后面的部分中将创建“Members.aspx”页。

现在您有了一个对所有用户可用的主页。用户可以从这个主页链接到其他页(其中的某些页是受限制的)。下一步是创建一个简单的登录页。

创建登录页

  1. 在解决方案资源管理器中右击网站的根文件夹,然后选择“添加新项”。将一个名为“Login.aspx”的“Web 窗体”添加到网站中。

  2. 在 Login.aspx 页中,切换到“设计”视图。

  3. 在“工具箱”中,从“登录”组中将 Login 控件拖动到页面上。

  4. Login 控件的“属性”面板中,将 DestinationPageUrl 属性设置为“~/Default.aspx”。

最后,需要创建一些表示站点的受限制内容的页。

创建受限制的页

  1. 在“解决方案资源管理器”中,右击“GuestPages”文件夹,单击“添加新项”,然后将一个名为“Guests.aspx”的“Web 窗体”添加到此文件夹中。

  2. 切换到“设计”视图,并在 Guests.aspx 页中添加一个标题,如“欢迎访问来宾页!”

  3. 在“工具箱”中,从“标准”组中将 HyperLink 控件拖动到页面上。在 HyperLink 控件的“属性”面板中,将 Text 属性设置为“主页”,并将 href 属性设置为“~/Default.aspx”。

  4. 在“解决方案资源管理器”中,右击“MemberPages”文件夹,选择“添加新项”,然后添加一个名为“Members.aspx”的“Web 窗体”。

  5. 切换到“设计”视图,并在“Members.aspx”页中添加一个标题,如“欢迎访问成员页!”

  6. 在“工具箱”中,从“标准”组中将 HyperLink 控件拖动到页面上。

  7. HyperLink 控件的“属性”面板中,将 Text 属性设置为“主页”,并将 href 属性设置为“~/Default.aspx”。

    不必为了限制对这些页的访问而在这些页中添加任何代码。对这些页的访问是受限制的,因为它们位于受访问规则保护的文件夹中。

测试角色

现在可以对站点进行测试了。

测试角色

  1. 切换到“Default.aspx”页,然后按 Ctrl+F5 运行该页。

  2. 单击“来宾和成员”。

    您会被重定向到“Login.aspx”页,因为您正尝试访问不允许匿名用户访问的页。

  3. 作为“guest1”(属于角色“guests”)登录。

    在成功登录后,您会被重定向到“Guests.aspx”页。

    单击“主页”返回到“Default.aspx”页。

    “Default.aspx”页会在您放置 LoginName 控件的位置显示文本“您好,guest1”。此外,LoginStatus 控件已将文本从“登录”更改为“注销”,因为您现在已经作为“guest1”登录。

  4. 单击“来宾和成员”。

    这次您会直接转到 Guests.aspx 页,因为您已作为属于角色 guests 的用户登录。

  5. 单击“主页”返回到“Default.aspx”页。

  6. 单击“成员”。

    您会被重定向到“Login.aspx”页,因为“guest1”没有对“Members.aspx”页的访问权限。

  7. 请作为“member1”或“memberGuest”登录。

    您会被重定向到“Members.aspx”页,因为您现在已作为属于角色“members”的用户登录。

  8. 单击“主页”返回到“Default.aspx”页。

    该页现在会反映您的新登录名。

后续步骤

本演练阐释 ASP.NET 角色管理的基本功能。您可能希望体验一下角色管理的其他功能。例如,您可能希望:

  • 使用 Windows 角色而不是使用在成员资格系统中创建的自定义角色。

  • 以编程方式使用角色。有关详细信息,请参见使用角色管理授权

  • 或者,可以创建自定义的提供程序,以便将现有的或自定义的数据存储区用于成员资格和角色信息。有关更多信息,请参见实现角色提供程序

  • 将访问规则应用于在网站的导航结构中显示的链接。有关更多信息,请参见演练:根据安全角色筛选站点地图节点

请参见

任务

演练:创建具有成员资格和用户登录功能的网站

演练:根据安全角色筛选站点地图节点

概念

了解角色管理

参考

AuthorizationSection