14.5 角色管理和授权
角色管理有助于用户管理授权,授权能够指定应用程序中的用户可访问的资源。角色管理允许向角色分配用户(如manager、sales、member等),从而将用户组视为一个单元角色管理,可以帮助指定应用程序中的用户可访问的资源,它允许向角色分配用户,从而灵活地更改特权、添加和删除用户。
建立角色的主要目的是为应用程序或网站提供一种管理用户组的访问规则的便捷方法。首先创建用户,然后将用户分配到角色,这样,就可以建立允许和拒绝访问受限文件夹的规则。如果未被授权的用户尝试查看受限制的页面,该用户会看到错误消息或被重定向到指定的页面。当为应用程序定义的访问规则越多,使用角色这种方法向用户组应用更改就越方便。
若要使用角色管理,首先要启用它,并配置能够利用角色的访问规则(可选),然后可以在运行时使用角色管理功能处理角色。
使用ASP.NET角色管理,需要设置在应用程序的Web.config文件中启用它。
同样,在ASP.NET中,授权也有两种方式对给定资源的访问权限:一种是URL授权;另一种是文件授权。
14.5.1 URL授权
URL授权由UrlAuthorizationModule执行,它将用户和角色映射到ASP.NET应用程序中的URL,该模块可用于有选择地允许或拒绝特定用户或角色对应用程序任意部分(通常为目录)的访问权限。
通过URL授权,可以显式允许或拒绝某个用户名或角色对特定目录的访问权限。为此,需要在该目录的配置文件中创建一个authorization节。若要启用URL授权,需要在配置文件的authorization节中的allow或deny元素中指定一个用户或角色列表。为目录建立的权限也会应用到其子目录,除非子目录中的配置文件重写这些权限。
下面是authorization节的语法。
allow或deny元素是必需的,allow和deny元素分别授予访问权限和撤销访问权限。每个元素都支持表14-8所示的特性。
表14-8 authorization节的特性
下面示例对Darcy标识和Admin角色的成员授予访问权限,对Wim标识(除非Admin角色中包含Wim标识)和所有匿名用户拒绝访问权限。
下面的authorization节演示如何允许Darcy标识的访问权限并拒绝所有其他用户的访问权限。
14.5.2 文件和文件夹访问授权
角色的典型应用是建立规则,用于允许或拒绝对页面或文件夹的访问,可以在Web.config文件的authorization中设置此类访问规则。
下面示例代码演示了允许Auser角色的用户查看名为Student的文件夹中的页面,同时也拒绝任何其他用户的访问。
如果使用Forms身份验证,则可以使用ASP.NET网站管理工具设置用户和角色,通过调用各种角色管理器方法来以编程方式执行此任务。
14.5.3 角色管理器
在ASP.NET中,若要识别应用程序中的用户,以便确定用户是否属于特定角色,需要用户对应用程序进行配置。有ASP.NET中两种方式建立用户标识:Windows身份验证和Forms身份验证。如果应用程序在局域网中运行,可以使用用户的Windows域账户名来标识用户。在这种情况下,用户的角色是该用户所属的Windows组。
在Internet应用程序中,可以使用Forms身份验证来建立用户标识,对于此任务,通常是创建一个页面,用户可以在该页面中输入用户名和密码,然后对用户进行验证。ASP.NETLogin控件用来创建登录页面并使用FormsAuthentication类建立用户标识。
注意
角色不处理未在应用程序中建立标识的用户(匿名用户)。
如果使用Login控件或Forms身份验证建立用户标识,还可以将角色管理和成员资格一起使用。在这个方案中,使用成员资格定义用户和密码,然后,可以使用角色管理定义角色并为这些角色分配成员,但是,角色管理并不依赖于成员资格。只要能够在应用程序中设置用户标识,就可以使用角色管理进行授权。
14.5.4 使用Roles API配置基于角色的授权
角色管理也有API,使用API可以以编程方式确定用户是否属于某角色。角色管理包含一组用于为当前用户建立角色并管理角色信息的类和接口。表14-9列出了角色管理类及其提供的功能。
表14-9 角色管理类及功能
在上表中,Roles是核心类,表14-10列出了Roles类的所有方法。
表14-10 Roles类的成员方法及其说明
Roles类管理角色中的用户成员资格,以便在ASP.NET应用程序中进行授权检查。
如果在应用程序中建立了用户标识,可以使用角色管理API方法创建角色、向角色中添加用户并获取有关用户所属的角色信息。
下面示例演示如何创建角色Auser。
下面示例演示使用编程方式将用户“darcy”单独添加到角色Student中,以及如何将用户Wyun和Kitty同时添加到角色Auser中。