2009-12-15 79 views
2

我正在使用多個角色提供程序,標準SQL提供程序加上一個自定義的提供程序。在Global.asax中 - RoleManager_GetRoles我爲那些應該使用自定義提供程序並將提供程序名稱設置爲我的自定義提供程序的用戶創建RolePrincipal,並讓其他用戶按正常方式處理。Roles.GetRolesForUser僅調用默認角色提供者?

這幾乎可以工作,asp.net允許訪問通過web.config保護的頁面,並調用我的提供者來獲取角色列表。但是,當我在代碼中調用Roles.GetRolesForUser()時,它似乎只會調用默認角色提供程序,而不是我的自定義提供程序。如果我將自定義提供程序設置爲默認提供程序,則會調用它,但只會調用它。

我已經解決了它,而不是枚舉角色提供程序並在提供程序上調用GetRolesForUser()與RolePrincipal具有匹配的名稱,但在我看來,Roles.GetRolesForUser()應該在默認情況下執行此操作。

我錯過了什麼嗎?

回答

5

RoleManager和RolePrincipal是用於不同目的的不同對象。

我想你要使用的是RolePrincipal實例上的GetRoles(),而不是Roles.GetRolesForUser()

區別在於顯式RolePrincipal定義了用戶和提供者之間的關係,而角色只是角色提供者的管理對象,並且沒有其他信息,只會使用默認提供者。從documentation for RolePrincipal

的RolePrincipal對象實現 IPrincipal接口和 表示用於HTTP請求的當前安全 上下文。

啓用角色管理(見 角色)時,RoleManagerModule分配 一個RolePrincipal對象到當前的用戶 財產的HttpContext。

RolePrincipal類公開當前HTTP 請求的 安全身份,並另外執行 檢查角色成員身份。如果 CacheRolesInCookie是真實的,那麼 RolePrincipal對象管理角色的 緩存列表和查找角色 成員在 緩存列表中的當前用戶,再作用 提供商。如果CacheRolesInCookie爲 爲false,則RolePrincipal對象始終爲 將使用 角色提供程序查找角色成員資格。

希望有所幫助。

+0

這是有道理的,並匹配我看到的行爲。不幸的是,我正在處理大量使用Roles.GetRolesForUser()的預先存在的代碼。 我猜是重新分解的時間。謝謝。 – Eddie 2009-12-15 18:07:05

+0

沒問題。如果你得到的答案對你有幫助,你應該可以隨時加註。 ;) – womp 2009-12-15 18:41:18

相關問題