定义哪些用户可以访问站点对于一个小型的站点来说是完全可行的,但站点必须非常小而且规模必须保持在一个可管理的范围内。一种更好的解决方案是定义一组用户角色,然后将用户账户添加到恰当的角色中。一旦用户成为某个角色的成员之后,就可以基于角色为用户授权。
例如,考虑一个典型的站点配置情景:Administrators角色的所有成员可以访问站点,而且可以访问站点的所有部分。Users角色的所有成员可以访问该站点,但不能访问某些受限的部分。所有匿名用户都将看到裁减过的页面,但没有任何个性化信息,而且理所当然不能访问受限的部分。
第11章将更详细地讨论角色,包括充分利用角色细化Wrox United站点。同时,在下面的“试一试”练习中可以体验到角色的作用,因为其中将扩展Chapter04示例包含角色。在这个示例中将定义两种角色:Users和Administrators。在向角色添加用户之前必须先创建这些角色。
试一试:向角色添加用户(1) 先再次启动Web Site Administration Tool。如果最近曾经使用过这个工具,那么可以右击系统托盘中该工具的图标并选择Open in Web Browser。或者,可以在VWD的主菜单条中选择Website→ASP.NET Configuration。在打开该工具之后,选择Security选项卡并单击Enable Roles链接,如图4-22所示。
图 4-22
(2) 接下来应该可以单击Create or Manage Roles链接。单击该链接进入Create New Role界面。在这里,需要创建两个角色:users和administrators,在文本框中输入角色的名称并单击Add Role即可(如图4-23所示)。
图 4-23
(3) 单击Administrators群组的Manage链接,然后搜索Administrator用户账户,使用如图4-24所示的搜索工具。搜索Administrator账户最简单的方法是搜索所有以A开始的账户,因此在文本框中输入a*并单击Find User。只要选中User Is In Role复选框即可将Administrator账户添加到Administrators角色中。
图 4-24
(4) 以相同的方式把其他用户账户添加到Users角色中。
(5) 单击Security选项卡返回到管理工具的主要Security区域。进入该选项卡之后,单击Manage access rules链接返回管理站点访问规则的页面。在前面的示例中已经使用过相同的界面管理访问规则(如图4-13所示),现在删除单个用户的访问规则,取而代之为Administrators和Users两个群组赋予权限。在删除规则时,将看到如图4-25所示的提示。
图 4-25
接下来可以在如图4-26所示的界面中依次为每个角色添加新的权限。
图 4-26
在添加好规则后,应该可以看到如图4-27所示的规则列表。
图 4-27
(6) 如果现在再次运行这个应用程序,应该可以像原来一样使用相同的用户账户登录站点。如果修改某个角色的权限,那么角色中的所有成员都将受到影响,因此可以限制所有非管理员用户的访问权限。
操作回顾这个示例中所做的修改都是在强大的Web Site Administration界面中完成的,这个工具简化了添加角色定义和访问规则的过程。如果要手动完成所有修改,如稍后所示,则必须修改前面见过的AspNetDB.mdf数据库中Roles表格的内容,然后通过手动修改UsersInRoles表格的内容向这些角色添加用户。接下来必须修改Web.config文件以改变站点的存取权限。
这个工具将自动化地完成整个配置过程,因此配置和管理都变得更加简单!然而,这是Visual Web Developer和Visual Studio 2005的功能,而不是ASP.NET的功能,因此如果不能使用VWD开发环境,那么必须手动执行这些操作。
如果返回到Web.config文件的Source View,将看到其中发生了如下改动(灰色部分):
<roleManager enabled="true" / >
<authorization >
<allow users="?" / >
<allow roles="administrators" / >
<allow roles="users" / >
</authorization >
另外,添加角色的过程也使用户配置文件数据库发生了少许改变,在该数据库中新增了两个表:一个用于保存角色,另一个用户记录用户分别属于哪个角色(如图4-28所示)。
图 4-28