利用 ASP.NET 角色管理,您能够根据用户组(称为角色)来管理应用程序的授权。通过向用户分配角色,您可以根据角色来控制对您的 Web 应用程序的不同部分或功能的访问,而无需通过根据用户名指定授权(或除了这样做之外)来控制此类访问。例如,某个员工应用程序可能具有如“经理”、“员工”、“董事”等角色,而且为每个角色都指定了不同的权限。
用户可以属于多个角色。例如,如果您的站点是一个论坛,则一些用户可能具有“成员”和“版主”双重角色。您可能定义每个角色在站点上具有不同的权限,而具有双重角色的用户将具有这两个角色的权限集。
要想为 ASP.NET 应用程序启用角色管理,请使用该应用程序的 Web.config 文件中 system.web 节的 roleManager 元素,如下例所示。
<configuration>
<connectionStrings>
<add name="SqlServices" connectionString="Data Source=localhost;Initial Catalog=aspnetdb;Integrated Security=SSPI;" />
</connectionStrings>
<system.web>
<authentication mode="Forms" >
<forms loginUrl="login.aspx"
name=".ASPXFORMSAUTH" />
</authentication>
<roleManager defaultProvider="SqlProvider"
enabled="true"
cacheRolesInCookie="true"
cookieName=".ASPROLES"
cookieTimeout="30"
cookiePath="/"
cookieRequireSSL="false"
cookieSlidingExpiration="true"
cookieProtection="All" >
<providers>
<add
name="SqlProvider"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="SqlServices"
applicationName="SampleApplication" />
</providers>
</roleManager>
</system.web>
</configuration> 可以在 Web 应用程序的配置文件中指定授权规则,也可以在代码中通过编程方式来这样做。例如,Web.config 文件中的以下 authorization 一节通过拒绝匿名用户来要求用户登录,然后只允许 Administrators 角色的用户进行访问。
<authorization>
<deny users="?" />
<allow roles="Administrators" />
<deny users="*" />
</authorization>
如果在应用程序的 Web.config 文件中使用 authorization 节来根据角色指定授权,则应用程序的用户必须提供经过验证的用户身份。可以通过使用 Windows 或 Forms 身份验证对用户身份进行验证。无法向匿名用户分配角色。可以独立于或结合 ASP.NET Membership 类来使用角色。
要通过编程方式验证角色成员资格,可以将 Roles 类或 Page..::.User 属性与 IsUserInRole 方法一起使用,也可以将 Page..::.User 属性与 IPrincipal..::.IsInRole 方法一起使用。有关通过编程方式检查角色成员资格的示例代码,请参见本主题中的“示例”部分。
利用 Roles 类,您还能够创建和删除角色,以及在角色中添加或移除用户。
可以将角色信息存储在几个数据源中。
如果用户的浏览器接受 Cookie,则可以在用户计算机的 Cookie 中存储该用户的角色信息。在提出每个页面请求时,ASP.NET 都会从 Cookie 中读取该用户的角色信息。这可以减少为了检索角色信息而必须与数据源进行的通信的数量,从而提升应用程序的性能。如果用户的角色信息因太长而无法存储在 Cookie 中,ASP.NET 将在 Cookie 中只存储最近使用的角色信息,之后会根据需要在数据源中查找其他角色信息。如果用户的浏览器不支持 Cookie 或禁用了 Cookie,则不会在 Cookie 中缓存角色信息。
可以在配置 ASP.NET 角色时指定 CookieProtectionValue 属性,以提高在 Cookie 中缓存的角色名称的可靠性。默认的 CookieProtectionValue 是 All,它对 Cookie 中的角色名称进行加密,并验证 Cookie 内容未被更改。