4

我正在開發具有兩個不同「角色層」的ASP.NET系統。主層將使用Active Directory組來確定成員資格,而第二層將使用數據庫。所有用戶都將具有第1層AD角色,但並非所有用戶都具有第2層數據庫角色。同時使用多個ASP.NET角色提供程序

我知道我可以使用AspNetWindowsTokenRoleProvider來管理AD角色,並且我知道我可以使用SqlRoleProvider來管理數據庫角色......我想要做的是同時使用兩者 - 這可能嗎?

+0

如果使用1個提供者並讓所有不應該具有數據庫角色的AD用戶實際上擁有虛擬數據庫角色並且權限不大?因此,您可以淡化一些有2個角色提供商IMO的複雜性。 – tzup 2009-12-18 08:59:51

+0

如果我理解正確,我認爲你只是建議只使用SqlRoleProvider?雖然沒有一個AD角色 - 將會有5個AD角色(我必須爲這些角色使用AD組)。 – Cocowalla 2009-12-18 09:12:17

回答

4

我會建議從WindowsTokenRoleProvider派生,然後重寫GetAllRolesGetRolesForUser

調用基類,然後再從數據庫追加角色的相應的列表。


順便說一句,作爲數據庫鍵我推薦使用該帳戶SID(或它的哈希值),而不是DOMAIN\username字符串,因爲用戶名可能會改變(婚姻等),並留下孤立的角色條目。發生的頻率比你預期的要多:-(

+0

我剛剛開始了一個類似的軌道(但是擴展了SqlRoleProvider)。我會看看如果這工作出 – Cocowalla 2009-12-18 09:34:14

+0

這有效:) 下一個問題是WindowsTokenRoleProvider當用戶在很多廣告組中的垃圾性能,但這是一個無關的問題... – Cocowalla 2009-12-18 14:52:22

2

提供者的構建方式是「可插入的」 - 理論上你可以放入你需要的任何一個,並讓它工作,它們也被記錄下來,以便你可以擴展現有的或使用自己的。

因此,基本上你希望你自己的提供者,將允許你結合這兩個 - 做到這一點,你可以,如@devstuff建議,從一個或另一個繼承,然後合併會導致重寫方法,或者您可以創建具有AD和SQL提供程序實例的代理類(可能是模式的專有名稱),並將調用傳遞併合並結果。

然而,基本上,答案是編寫自己的提供者,將兩家股票供應商結合起來,以滿足您的特定要求。

+0

個人我更喜歡「代理類」和那可以是我認爲的「裝飾者」模式。 – 2009-12-18 11:46:53

+0

代理合並+1。 – devstuff 2009-12-18 14:07:56

相關問題