Roles 类

定义

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

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

示例

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

<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 应用程序不同部分或功能的访问权限,而不是基于用户名指定授权,或者此外,还可以控制对 Web 应用程序的不同部分或功能的访问。 例如,员工应用程序可能具有经理、员工、董事等角色,其中为每个角色指定了不同的特权。

用户可以属于多个角色。 例如,如果你的网站是一个论坛,则某些用户可能同时担任成员和审阅人的角色。 你可以将每个角色定义为在网站上具有不同的权限,并且具有这两个角色的用户将拥有这两组特权。

若要为 ASP.NET 应用程序启用角色管理,请使用应用程序的 Web.config 文件中 部分的 roleManager 元素 system.web ,如以下示例所示。

<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 或窗体身份验证对用户进行身份验证。 无法将匿名用户分配到角色。 角色可以独立于 ASP.NET 类使用,也可以与 ASP.NET Membership 类结合使用。

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

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)

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

适用于

另请参阅