更新:2007 年 11 月
描述示例角色提供程序和支持的数据源架构。
下面的主题中包括一个示例角色提供程序实现的代码。示例提供程序使用“用于 ODBC 的 .NET Framework 数据提供程序”连接到 ODBC 数据源。该示例使用一个 Access 数据库作为数据源。
本主题描述了如何实现示例配置文件提供程序,以及如何配置 ASP.NET 应用程序以使用示例提供程序。
![]() |
---|
由于数据源包含不同的 SQL 语法,有些命令将能够作用于一个数据源,但不能作用于另一个数据源。因此,即使您正使用用于 ODBC 的 .NET Framework 数据提供程序或用于 OLEDB 的 .NET Framework 数据提供程序访问数据源,也应该创建特定于数据源的角色提供程序,例如 SybaseProfileProvider 或 OracleProfileProvider。 |
若要查看示例提供程序的代码,请参见如何:角色提供程序实现示例。
数据库架构
该示例角色提供程序使用两个数据库表管理角色信息:Roles 表包含角色名和应用程序名,UsersInRoles 表用于将用户名与应用程序的角色名相关联。
若要创建供示例提供程序使用的 Access 表,请在新的或现有的 Access 数据库中发出下面的数据定义查询。
CREATE TABLE Roles
(
Rolename Text (255) NOT NULL,
ApplicationName Text (255) NOT NULL,
CONSTRAINT PKRoles PRIMARY KEY (Rolename, ApplicationName)
)
CREATE TABLE UsersInRoles
(
Username Text (255) NOT NULL,
Rolename Text (255) NOT NULL,
ApplicationName Text (255) NOT NULL,
CONSTRAINT PKUsersInRoles PRIMARY KEY (Username, Rolename, ApplicationName)
)
事件日志访问
如果示例提供程序在使用数据源时遇到异常,它会将异常的详细信息写入到应用程序事件日志中,而不是将异常返回到 ASP.NET 应用程序。这是一种安全措施,用来避免在 ASP.NET 应用程序中公开有关数据源的私有信息。
该示例提供程序指定了“OdbcRoleProvider”的事件 Source。在 ASP.NET 应用程序能够成功地写入应用程序事件日志之前,您需要创建以下的注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\OdbcRoleProvider
如果不想让示例提供程序将异常写入事件日志,则可以在 Web.config 文件中将 writeExceptionsToEventLog 属性设置为 false。
生成示例提供程序
为使用示例提供程序,可以将您的源代码放到应用程序的 App_Code 目录下。请注意,如果您的应用程序的 App_Code 目录中已经有源代码,则您必须添加使用与目录中现有代码相同的语言编写的示例提供程序版本。当请求您的应用程序时,ASP.NET 将对该提供程序进行编译。
您也可以将示例提供程序作为库进行编译,并将其放入 Web 应用程序的 Bin 目录中,或对其进行强命名并放入 GAC 中。下面的命令演示如何使用命令行编译器编译示例提供程序。
vbc /out:OdbcRoleProvider.dll /t:library OdbcRoleProvider.vb /r:System.Web.dll /r:System.Configuration.dll
csc /out:OdbcRoleProvider.dll /t:library OdbcRoleProvider.cs /r:System.Web.dll /r:System.Configuration.dll
在 ASP.NET 应用程序中使用示例提供程序
下面的示例演示一个已配置为使用示例提供程序的 ASP.NET 应用程序的 Web.config 文件。该示例使用名为“RolesDSN”的 ODBC DSN 来获取 Access 数据库的连接信息。若要使用示例提供程序,您需要创建“RolesDSN”系统 DSN,或提供到您的数据库的有效 ODBC 连接字符串。
此示例配置假设您的网站设置为使用 Forms 身份验证,并包括允许用户登录的名为 login.aspx 的 ASP.NET 页面。
<configuration>
<connectionStrings>
<add name="OdbcServices" connectionString="DSN=RolesDSN;" />
</connectionStrings>
<system.web>
<authentication mode="Forms" />
<forms loginUrl="loginvb.aspx"
name=".ASPXFORMSAUTH" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
<roleManager defaultProvider="OdbcRoleProvider"
enabled="true"
cacheRolesInCookie="true"
cookieName=".ASPROLES"
cookieTimeout="30"
cookiePath="/"
cookieRequireSSL="false"
cookieSlidingExpiration="true"
cookieProtection="All" >
<providers>
<clear />
<add
name="OdbcRoleProvider"
type="Samples.AspNet.Roles.OdbcRoleProvider"
connectionStringName="OdbcServices"
applicationName="SampleApplication"
writeExceptionsToEventLog="false" />
</providers>
</roleManager>
</system.web>
</configuration>