角色提供者實作範例
更新:2007 年 11 月
描述角色提供者範例和支援的資料來源結構描述 (Schema)。
下列主題包含角色提供者實作範例的程式碼。範例提供者會使用 .NET Framework Data Provider for ODBC 來連接 ODBC 資料來源。範例會將 Access 資料庫當成它的資料來源使用。
這個主題描述如何實作設定檔提供者範例,以及如何設定 ASP.NET 應用程式來使用範例提供者。
注意事項: |
---|
因為資料來源包含不同的 SQL 語法,某些命令可以在某個資料來源中使用,但是無法在別的資料來源中使用。因此,即使您正在使用 .NET Framework Data Provider for ODBC 或 .NET Framework Data Provider for OLEDB 存取資料來源 (如 SybaseProfileProvider 或 OracleProfileProvider),也應該建立資料來源專用的角色提供者。 |
若要檢視範例提供者的程式碼,請參閱 HOW TO:角色提供者實作範例。
資料庫結構描述
角色提供者範例會使用兩個資料庫資料表來管理角色資訊:一個為 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)
)
事件記錄檔存取
如果範例提供者在使用資料來源時遇到例外狀況 (Exception),它會將例外狀況的詳細資料寫入至應用程式事件記錄檔,而不是將例外狀況傳回給 ASP.NET 應用程式。這種做法是一種安全措施,可避免在 ASP.NET 應用程式中公開 (Expose) 資料來源的私人資訊。
範例提供者會指定 "OdbcRoleProvider" 的事件 Source。您需要建立下列登錄機碼,ASP.NET 應用程式才能夠順利寫入至應用程式事件記錄檔。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application\OdbcRoleProvider
如果您不想讓範例提供者將例外狀況寫入至事件記錄檔,則可以在 Web.config 檔中將 writeExceptionsToEventLog 屬性 (Attribute) 設定為 false。
建置範例提供者
為了使用範例提供者,您可以將原始程式碼放在應用程式的 App_Code 目錄下。請注意如果應用程式的 App_Code 目錄中已經有原始程式碼存在,則必須加入使用和目錄中現有程式碼相同的語言所撰寫的範例提供者。當有人要求您的應用程式時,ASP.NET 會編譯這個提供者 (Provider)。
您也可以將範例提供者編譯為程式庫,並且放在 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 連接字串 (Connection String)。
範例的組態會假設您的網站已設定為使用表單驗證,並包含名為 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>