Roles 类

定义

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

public ref class Roles abstract sealed
public static class Roles
type Roles = class
Public Class Roles
继承
Roles

示例

以下示例显示了配置为使用 ASP.NET 成员身份和 ASP.NET 角色的应用程序Web.config文件,以及用于SqlRoleProvider在SQL Server数据库中存储成员身份和角色信息。 用户通过表单身份验证进行身份验证,并且仅允许管理员角色中的用户访问应用程序。

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

下面的代码示例以编程方式检查登录用户是否在管理员角色中,然后允许用户查看其他用户的角色。

注解

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>
  <deny users="?" />
  <allow roles="Administrators" />
  <deny users="*" />
</authorization>

如果使用 authorization 应用程序的Web.config文件中的部分来指定基于角色的授权,则应用程序的用户必须提供经过身份验证的用户标识。 可以使用 Windows 或 Forms 身份验证对用户进行身份验证。 无法将匿名用户分配到角色。 角色可以独立于或与 ASP.NET Membership 类结合使用。

若要以编程方式验证角色成员身份,可以将类或属性与方法一起使用IsUserInRole,也可以使用该方法的属性Page.UserIPrincipal.IsInRolePage.User Roles 有关以编程方式检查角色成员身份的示例代码,请参阅本主题中的“示例”部分。

Roles 类还可用于创建和删除角色,以及向角色添加用户或删除用户。

备注

如果已将应用程序配置为使用该 WindowsTokenRoleProvider 类,则无法修改角色或角色成员身份。 类WindowsTokenRoleProvider仅验证Windows安全组中的成员身份。 在这种情况下,必须使用Windows用户帐户管理,而不是 ASP.NET 角色来创建和删除组和管理组成员身份。

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

  • 可以使用WindowsTokenRoleProvider该类基于Windows组中的成员身份检索角色信息。

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

  • 如果你有现有角色信息,或者想要在数据源中存储角色信息并从数据源检索角色信息,而不是Windows、授权存储或SQL Server,则可以通过创建继承抽象类的RoleProvider类来实现自定义角色提供程序。 有关详细信息,请参阅 实现角色提供程序

如果用户的浏览器接受 Cookie,则可以将该用户的角色信息存储在用户计算机上的 Cookie 中。 在每个页面请求中,ASP.NET 从 Cookie 中读取该用户的角色信息。 这可以通过减少与数据源检索角色信息所需的通信量来提高应用程序性能。 如果用户的角色信息太长而无法存储在 Cookie 中,ASP.NET 仅存储 Cookie 中最近使用的角色信息,然后根据需要在数据源中查找其他角色信息。 如果用户的浏览器不支持 Cookie 或 Cookie,则角色信息不会缓存在 Cookie 中。

可以通过在配置 ASP.NET 角色时指定CookieProtectionValue属性来提高 cookie 中缓存的角色名称的可靠性。 默认值 CookieProtectionValueAll加密 Cookie 中的角色名称,并验证 Cookie 内容是否已更改。

属性

ApplicationName

获取或设置要存储和检索其角色信息的应用程序的名称。

CacheRolesInCookie

获取一个值,该值指示当前用户的角色是否已缓存在某个 Cookie 中。

CookieName

获取在其中缓存角色名称的 Cookie 的名称。

CookiePath

获取缓存角色名称的 Cookie 的路径。

CookieProtectionValue

获取一个指示如何保护在 Cookie 中缓存的角色名称的值。

CookieRequireSSL

获取一个值,该值指示角色名称 Cookie 是否需要 SSL 以便返回到服务器。

CookieSlidingExpiration

指示是否将要定期重置角色名称 Cookie 的到期日期和时间。

CookieTimeout

获取角色 Cookie 到期前的分钟数。

CreatePersistentCookie

获取一个值,该值指示角色名称 Cookie 是基于会话的还是持久性的。

Domain

获取角色名称 Cookie 的域的值。

Enabled

获取或设置用来指示是否为当前 Web 应用程序启用角色管理的值。

MaxCachedResults

获取要为用户缓存的角色名称的最大数量。

Provider

获取应用程序的默认角色提供程序。

Providers

获取 ASP.NET 应用程序的角色提供程序的集合。

方法

AddUsersToRole(String[], String)

将指定的用户添加到指定的角色中。

AddUsersToRoles(String[], String[])

将指定的用户添加到指定的角色中。

AddUserToRole(String, String)

将指定的用户添加到指定的角色中。

AddUserToRoles(String, String[])

将指定的用户添加到指定的角色中。

CreateRole(String)

将新的角色添加到数据源。

DeleteCookie()

删除在其中缓存角色名称的 Cookie。

DeleteRole(String)

从数据源移除一个角色。

DeleteRole(String, Boolean)

从数据源移除一个角色。

FindUsersInRole(String, String)

获取属于指定角色的用户的列表,其中用户名包含要匹配的指定用户名。

GetAllRoles()

获取应用程序的所有角色的列表。

GetRolesForUser()

获取当前登录的用户所属角色的列表。

GetRolesForUser(String)

获取一个用户所属角色的列表。

GetUsersInRole(String)

获取属于指定角色的用户的列表。

IsUserInRole(String)

获取一个值,该值指示当前登录的用户是否属于指定的角色。 API 只能在 ASP.NET 请求线程的上下文内进行调用,在该批准的使用情况下,它是线程安全的。

IsUserInRole(String, String)

获取一个指示指定用户是否属于指定角色的值。 API 只能在 ASP.NET 请求线程的上下文内进行调用,在该批准的使用情况下,它是线程安全的。

RemoveUserFromRole(String, String)

从指定的角色中移除指定的用户。

RemoveUserFromRoles(String, String[])

从指定的角色中移除指定的用户。

RemoveUsersFromRole(String[], String)

从指定的角色中移除指定的用户。

RemoveUsersFromRoles(String[], String[])

移除指定角色中的指定用户名。

RoleExists(String)

获取一个值,该值指示指定的角色名称是否已存在于角色数据源中。

适用于

另请参阅