请单击以进行评分并提供反馈
MSDN
MSDN Library
.NET 开发
.NET Framework
Roles 类
This page is specific to
Microsoft Visual Studio 2008/.NET Framework 3.5

Other versions are also available for the following:
.NET Framework 类库
Roles 类

管理角色中的用户成员资格,以便在 ASP.NET 应用程序中进行授权检查。无法继承此类。

命名空间:  System.Web.Security
程序集:  System.Web(在 System.Web.dll 中)

Visual Basic(声明)
Public NotInheritable Class Roles
Visual Basic(用法)
不需要声明静态类的实例来访问其成员。
C#
public static class Roles
Visual C++
public ref class Roles abstract sealed
J#
public final class Roles
JScript
public final class Roles

利用 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 类,您还能够创建和删除角色,以及在角色中添加或移除用户。

说明:

如果配置了应用程序以使用 WindowsTokenRoleProvider 类,则无法修改角色或角色成员资格。WindowsTokenRoleProvider只验证 Windows 安全组中的成员资格。在这种情况下,必须使用 Windows 用户帐户管理(而不是 ASP.NET 角色)来创建、删除组以及管理组成员资格。

可以将角色信息存储在几个数据源中。

  • 可以使用 WindowsTokenRoleProvider 类根据 Windows 组中的成员资格来检索角色信息。

  • 可以通过使用 SqlRoleProvider 类,在 SQL Server 数据库中存储角色信息。

  • 如果已具有角色信息,或者想在不同于 Windows、授权存储或 SQL Server 的数据源中存储和检索角色信息,则可以通过创建一个继承 RoleProvider 抽象类的类,来实现自定义的角色提供程序。有关更多信息,请参见 实现角色提供程序

如果用户的浏览器接受 Cookie,则可以在用户计算机的 Cookie 中存储该用户的角色信息。在提出每个页面请求时,ASP.NET 都会从 Cookie 中读取该用户的角色信息。这可以减少为了检索角色信息而必须与数据源进行的通信的数量,从而提升应用程序的性能。如果用户的角色信息因太长而无法存储在 Cookie 中,ASP.NET 将在 Cookie 中只存储最近使用的角色信息,之后会根据需要在数据源中查找其他角色信息。如果用户的浏览器不支持 Cookie 或禁用了 Cookie,则不会在 Cookie 中缓存角色信息。

可以在配置 ASP.NET 角色时指定 CookieProtectionValue 属性,以提高在 Cookie 中缓存的角色名称的可靠性。默认的 CookieProtectionValueAll,它对 Cookie 中的角色名称进行加密,并验证 Cookie 内容未被更改。

TopicLocation
如何:角色提供程序实现示例生成 ASP .NET Web 应用程序
如何:角色提供程序实现示例在 Visual Studio 中生成 ASP .NET Web 应用程序

下面的示例演示一个应用程序的 Web.config 文件,该应用程序被配置为使用 ASP.NET 成员资格和 ASP.NET 角色,并使用 SqlRoleProvider 在 SQL Server 数据库中存储成员资格和角色信息。使用 Forms 身份验证来验证用户的身份,并只允许角色为 Administrators 的用户访问此应用程序。

<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>

    <authorization>
      <deny users="?" />
      <allow roles="Administrators" />
      <deny users="*" />
    </authorization>

    <membership defaultProvider="AspNetSqlProvider" userIsOnlineTimeWindow="15">
    </membership>

    <roleManager defaultProvider="SqlProvider" 
      enabled="true"
      cacheRolesInCookie="true"
      cookieName=".ASPROLES"
      cookieTimeout="30"
      cookiePath="/"
      cookieRequireSSL="true"
      cookieSlidingExpiration="true"
      cookieProtection="All" >

      <providers>
        <clear />
        <add
          name="SqlProvider"
          type="System.Web.Security.SqlRoleProvider"
          connectionStringName="SqlServices"
          applicationName="SampleApplication" />
        </providers>

    </roleManager>
  </system.web>
</configuration>

下面的代码示例演示的是:通过编程方式在允许登录的用户查看其他用户的角色之前,检查其角色是否为 Administrators。

System..::.Object
  System.Web.Security..::.Roles
此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求

.NET Framework

受以下版本支持:3.5、3.0 SP1、3.0、2.0 SP1 和 2.0
社区内容   什么是社区内容?
添加新内容 RSS  批注
Processing
© 2008 Microsoft Corporation 版权所有。 保留所有权利  |  商标  |  隐私权声明
Page view tracker