实现角色提供程序(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 方法时打开文件或(创建)数据库连接。

相关文章推荐

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

Asp.Net Forms验证(自定义、角色提供程序、单点登录) 以前开发项目时经常是自己开发一套用户权限管理系统进行验证,比较灵活。最近为了单点登录的问题又把Asp.Net...

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

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

ASP.NET面向角色授权之:自带登录控件登录验证与授权原理及自定义修改方法。

在ASP.NET1.x中,需要编写大量代码来实现可靠的安全策略,ASP.NET2.0和之后的版本中提供的高级控件和概念及应用程序服务,提供这些控件和应用程序服务不需要编写任务代码而只需通过简单的配置即...

ASP.NET自定义输出缓存提供程序

我们知道,自从ASP.NET 发布以来,页输出缓存使开发人员能够把由网页、控件及HTTP响应等生成的输出内容存储到内存中。这样一来,在后面的Web请求时,系统能够从内存检索这些生成的输出内容而不是从头...

ASP.net MVC 基于角色的权限控制系统的实现

一、引言 我们都知道ASP.net mvc权限控制都是实现AuthorizeAttribute类的OnAuthorization方法。 下面是最常见的实现方式: public ...

ASP.NET网站权限设计实现(二)——角色权限绑定

上一篇:ASP.NET网站权限设计实现(一)——使用PowerDesigner进行数据库设计1、关于使用的几张表的说明 (1)Module:模块表,记录模块名称、编码等模块基本数据。 (2)Permi...

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明

ASP.NET MVC+EF框架+EasyUI实现权限管系列   (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装...
  • txqqnet
  • txqqnet
  • 2013年10月11日 14:12
  • 806

利用已有数据库配合ASP.NET2.0内置用户 角色 授权系统打造自己的权限分配程序(2)

接上面 当我们按照上面的步骤执行之后,就可以得用"ASP.NET 2.0提供的网站配置工具",在"安全"项目中为各角色建立访问规则了. 但有一点要注意,就是ASP.NET 2.0的访问规则是以"文...

自定义的ASP.NET应用程序集成到SharePoint(2)

http://www.devexpertise.com/2009/02/25/integrating-a-custom-aspnet-application-into-sharepoint-part-...
  • gnicky
  • gnicky
  • 2012年03月07日 12:55
  • 897
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实现角色提供程序(Asp.Net实现自定义角色提供程序)
举报原因:
原因补充:

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