实现角色提供程序(Asp.Net实现自定义角色提供程序)

原创 2006年06月08日 10:08:00

ASP.NET 角色管理使您可以轻松地将多个不同的提供程序用于您的 ASP.NET 应用程序。可以使用 .NET Framework 中包含的配置文件提供程序,也可以实现自己的提供程序。

主要有两个原因需要创建自定义角色提供程序。

  • 需要将角色信息存储在 .NET Framework 中包含的角色提供程序所不支持的数据源中,如 FoxPro 数据库、Oracle 数据库或其他数据源。

  • 需要使用不同于 .NET Framework 包含的提供程序所使用的数据库架构来管理角色信息。一个常见的示例是已存在于公司或网站的 SQL Server 数据库中的授权数据。

必需的类

若要实现角色提供程序,请创建一个继承 System.Web.Security 命名空间中 RoleProvider 抽象类的类。RoleProvider 抽象类继承 System.Configuration.Provider 命名空间的 ProviderBase 抽象类。因此,也必须实现 ProviderBase 类所需的成员。下表列出了必须实现的从 ProviderBaseRoleProvider 抽象类继承的属性和方法,并提供了每个属性和方法的说明。若要查看每个成员的实现,请参见为角色提供程序实现示例提供的代码。

ProviderBase 成员

 
成员 说明

Initialize 方法

接受提供程序的名称和配置设置的 NameValueCollection 作为输入。用于设置提供程序实例的属性值,其中包括特定于实现的值和配置文件(Machine.config 或 Web.config)中指定的选项。

RoleProvider 成员

 
成员 说明

ApplicationName 属性

使用配置文件 (Web.config) 中指定的角色信息的应用程序的名称。ApplicationName 存储在带有相关用户信息的数据源中,并在查询用户信息时使用。有关更多信息,请参见本主题后面的有关 ApplicationName 的部分。

如果未明确指定,则此属性是读写,并且默认值为 ApplicationPath

AddUsersToRoles 方法

接受用户名列表和角色名列表作为输入,然后将指定的用户与在已配置的 ApplicationName 的数据源中指定的角色关联。

如果对于已配置的 ApplicationName 不存在任何指定的角色名或用户名,则应引发 ProviderException

如果任何指定的用户名或角色名为空字符串,则应引发 ArgumentException,如果任何指定的用户名或角色名为 null(在 Visual Basic 中为 Nothing),则应引发 ArgumentNullException

如果数据源支持事务,则应在事务中包含每个添加操作,并且如果添加操作失败,则应回滚事务并引发异常。

CreateRole 方法

接受角色名作为输入,并将指定的角色添加到已配置的 ApplicationName 的数据源中。

如果对于已配置的 ApplicationName 已存在指定的角色名,则应引发 ProviderException

如果指定的角色名为空字符串、包含逗号或超过数据源所允许的最大长度,则应引发 ArgumentException;如果指定的角色名为 null(在 Visual Basic 中为 Nothing),则应引发 ArgumentNullException

DeleteRole 方法

接受角色名以及一个指示如果仍有用户与该角色关联时是否引发异常的布尔值作为输入。DeleteRole 从已配置的 ApplicationName 的数据源删除指定的角色。

如果 throwOnPopulatedRole 参数为 true,且由角色名参数标识的角色具有一个或一个以上成员,则引发 ProviderException,并且不删除该角色。如果 throwOnPopulatedRole 参数为 false,则不论该角色是否为空,都会删除角色。

从数据源删除角色时,确保也删除用户名与已配置的 ApplicationName 的已删除的角色之间的任何关联。

如果指定的角色名不存在,或为空字符串,则应引发 ArgumentException。如果指定的角色名为 null(在 Visual Basic 中为 Nothing),则应引发 ArgumentNullException

FindUsersInRole 方法

接受角色名和要搜索的用户名作为输入,并返回角色中的用户列表,其中的用户名包含与为已配置的 ApplicationName 提供的 usernameToMatch 匹配的部分。根据数据源提供通配符支持。根据用户名按字母顺序返回用户。

如果数据源中不存在指定的角色名,则建议引发 ProviderException

GetAllRoles 方法

从数据源返回角色名的列表。仅检索指定的 ApplicationName 的角色。

如果已配置的 ApplicationName 不存在任何角色,则应返回不带任何元素的字符串数组。

GetRolesForUser 方法

接受用户名作为输入,并从数据源返回与指定的用户关联的角色名。仅检索已配置的 ApplicationName 的角色。

如果已配置的 ApplicationName 对于指定用户不存在任何角色,则应返回不带任何元素的字符串数组。

如果指定的用户名为空字符串,则应引发 ArgumentException。如果指定的用户名为 null(在 Visual Basic 中为 Nothing),则应引发 ArgumentNullException

GetUsersInRole 方法

接受角色名作为输入,并从数据源返回与角色关联的用户名。仅检索已配置的 ApplicationName 的角色。

如果对于已配置的 ApplicationName 不存在指定的角色名,则应引发 ProviderException

如果没有与已配置的 ApplicationName 的指定角色关联的用户,则应返回不带任何元素的字符串数组。

如果指定的角色名为空字符串、包含逗号或超过数据源所允许的角色名的最大长度,则应引发 ArgumentException。如果指定的角色名为 null(在 Visual Basic 中为 Nothing),则应引发 ArgumentNullException

IsUserInRole 方法

接受用户名和角色名作为输入,并确定当前登录用户是否与已配置的 ApplicationName 的数据源中的角色关联。

如果对于已配置的 ApplicationName 不存在指定的角色名或用户名,则应引发 ProviderException

如果指定的用户名或角色名为空字符串,则应引发 ArgumentException,如果指定的用户名或角色名为 null(在 Visual Basic 中为 Nothing),则应引发 ArgumentNullException

RemoveUsersFromRoles 方法

接受用户名列表和角色名列表作为输入,然后删除指定用户与在已配置的 ApplicationName 的数据源中的指定角色的关联。

如果对于已配置的 ApplicationName 不存在任何指定的角色名或用户名,则应引发 ProviderException

如果任何指定的用户名或角色名为空字符串,则应引发 ArgumentException,如果任何指定的用户名或角色名为 null(在 Visual Basic 中为 Nothing),则应引发 ArgumentNullException

如果数据源支持事务,则应在事务中包含每个删除操作,并且如果删除操作失败,则应回滚事务并引发异常。

RoleExists 方法

接受角色名作为输入,并确定在已配置的 ApplicationName 的数据源中是否存在该角色名。

如果指定的角色名不存在,或为空字符串,则应引发 ArgumentException。如果指定的角色为 null(在 Visual Basic 中为 Nothing),则建议引发 ArgumentNullException

ApplicationName

角色提供程序为每个应用程序单独存储角色信息。这允许多个 ASP.NET 应用程序使用相同数据源,而在使用重复用户名时不会发生冲突。或者,多个 ASP.NET 应用程序可以通过指定同一 ApplicationName 来使用同一角色数据源。

因为角色提供程序单独为每个应用程序存储角色信息,所以需要确保数据架构包含应用程序名,并确保查询和更新也包含应用程序名。例如,以下命令用于从数据库中检索角色名,并确保在查询中包括 ApplicationName

SELECT Rolename FROM Roles 
  WHERE Rolename = 'Administrators' AND ApplicationName = 'MyApplication'

线程安全

对于应用程序的配置文件中指定的每个角色提供程序,ASP.NET 都会实例化单个角色提供程序实例,该实例用于 HttpApplication 对象所服务的所有请求。因此,可以有多个请求并发执行。ASP.NET 不保证对提供程序的调用的线程安全。因此需要编写线程安全的提供程序代码。例如,创建一个与数据库的连接或打开一个文件用于编辑,这些均应在被调用的成员(如 AddUsersToRoles)内完成,而不是在调用 Initialize 方法时打开文件或(创建)数据库连接。

角色提供程序

继承自:System.web.Security.RoleProvider抽象类提供了角色提供者。 .net2.0之后就提供了RoleProvider类的具体实现,有两种: Authorizat...
  • hellowhy79
  • hellowhy79
  • 2011年10月19日 12:56
  • 395

ASP.NET成员资格管理

创建ASP.NET 2.0 表单验证数据库创建ASP.NET 2.0数据库使用Microsoft .NET 2.0提供的工具aspnet_regsql.exe来创建一个名为AspNetDb数据库: 在...
  • chenxinjian123
  • chenxinjian123
  • 2010年03月28日 10:40
  • 2744

Asp.Net Forms验证(自定义、角色提供程序、单点登录)

以前开发项目时经常是自己开发一套用户权限管理系统进行验证,比较灵活。最近为了单点登录的问题又把Asp.Net自带的验证方式看了一遍,发现这种方式也比较方便,功能也还可以。在Asp.Net提供了三种常用...
  • liuchengbo1744
  • liuchengbo1744
  • 2008年05月07日 05:52
  • 343

Asp.Net Forms验证(自定义、角色提供程序、单点登录)

以前开发项目时经常是自己开发一套用户权限管理系统进行验证,比较灵活。最近为了单点登录的问题又把Asp.Net自带的验证方式看了一遍,发现这种方式也比较方便,功能也还可以。在Asp.Net提供了三种常用...
  • sven_xu
  • sven_xu
  • 2015年06月02日 09:14
  • 233

Asp.Net Forms验证(自定义、角色提供程序)

  以前开发项目时经常是自己开发一套用户权限管理系统进行验证,比较灵活。最近为了单点登录的问题又把Asp.Net自带的验证方式看了一遍,发现这种方式也比较方便,功能也还可以。在Asp.Net提供了三种...
  • andycool1986827
  • andycool1986827
  • 2008年07月24日 17:28
  • 245

ASP.NET Forms验证(自定义、角色提供程序)1

以前开发项目时经常是自己开发一套用户权限管理系统进行验证,比较灵活。最近为了单点登录的问题又把Asp.Net自带的验证方式看了一遍,发现这种方式也比较方便,功能也还可以。在Asp.Net提供了三种常用...
  • yangfcf
  • yangfcf
  • 2009年06月24日 21:56
  • 321

ASP.NET Forms验证(自定义、角色提供程序)2

2、自定义角色提供程序如果要按照角色进行验证的话,肯定要涉及到角色提供程序,在默认情况下也是会去连接默认的数据库的,我们可以自己写一个角色提供程序来实现自己的逻辑。首先在web.config中加入配置...
  • yangfcf
  • yangfcf
  • 2009年06月24日 21:57
  • 576

ASP.NET Forms验证(自定义、角色提供程序)

ASP.NET Forms验证(自定义、角色提供程序) Posted by: bin in Untagged  on 4月 , 2009
  • wzwind
  • wzwind
  • 2009年08月07日 12:56
  • 568

Asp.Net Forms验证(自定义、角色提供程序)

以前开发项目时经常是自己开发一套用户权限管理系统进行验证,比较灵活。最近为了单点登录的问题又把Asp.Net自带的验证方式看了一遍,发现这种方式也比较方便,功能也还可以。在Asp.Net提供了三种常用...
  • sven_xu
  • sven_xu
  • 2015年06月02日 09:14
  • 166

ASP.NET MVC4 自定义权限(角色)验证

ASP.NET MVC4 自定义权限(角色)验证。 自定义验证方法,自定义验证失败处理方法。 异步请求验证失败,返回JSON数据。 同步请求验证失败,跳转登录页。...
  • shuai_wy
  • shuai_wy
  • 2017年09月30日 17:49
  • 568
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实现角色提供程序(Asp.Net实现自定义角色提供程序)
举报原因:
原因补充:

(最多只允许输入30个字)