我正在開發具有兩個不同「角色層」的ASP.NET系統。主層將使用Active Directory組來確定成員資格,而第二層將使用數據庫。所有用戶都將具有第1層AD角色,但並非所有用戶都具有第2層數據庫角色。同時使用多個ASP.NET角色提供程序
我知道我可以使用AspNetWindowsTokenRoleProvider來管理AD角色,並且我知道我可以使用SqlRoleProvider來管理數據庫角色......我想要做的是同時使用兩者 - 這可能嗎?
我正在開發具有兩個不同「角色層」的ASP.NET系統。主層將使用Active Directory組來確定成員資格,而第二層將使用數據庫。所有用戶都將具有第1層AD角色,但並非所有用戶都具有第2層數據庫角色。同時使用多個ASP.NET角色提供程序
我知道我可以使用AspNetWindowsTokenRoleProvider來管理AD角色,並且我知道我可以使用SqlRoleProvider來管理數據庫角色......我想要做的是同時使用兩者 - 這可能嗎?
我會建議從WindowsTokenRoleProvider
派生,然後重寫GetAllRoles
,GetRolesForUser
等
調用基類,然後再從數據庫追加角色的相應的列表。
順便說一句,作爲數據庫鍵我推薦使用該帳戶SID(或它的哈希值),而不是DOMAIN\username
字符串,因爲用戶名可能會改變(婚姻等),並留下孤立的角色條目。發生的頻率比你預期的要多:-(
提供者的構建方式是「可插入的」 - 理論上你可以放入你需要的任何一個,並讓它工作,它們也被記錄下來,以便你可以擴展現有的或使用自己的。
因此,基本上你希望你自己的提供者,將允許你結合這兩個 - 做到這一點,你可以,如@devstuff建議,從一個或另一個繼承,然後合併會導致重寫方法,或者您可以創建具有AD和SQL提供程序實例的代理類(可能是模式的專有名稱),並將調用傳遞併合並結果。
然而,基本上,答案是編寫自己的提供者,將兩家股票供應商結合起來,以滿足您的特定要求。
個人我更喜歡「代理類」和那可以是我認爲的「裝飾者」模式。 – 2009-12-18 11:46:53
代理合並+1。 – devstuff 2009-12-18 14:07:56
如果使用1個提供者並讓所有不應該具有數據庫角色的AD用戶實際上擁有虛擬數據庫角色並且權限不大?因此,您可以淡化一些有2個角色提供商IMO的複雜性。 – tzup 2009-12-18 08:59:51
如果我理解正確,我認爲你只是建議只使用SqlRoleProvider?雖然沒有一個AD角色 - 將會有5個AD角色(我必須爲這些角色使用AD組)。 – Cocowalla 2009-12-18 09:12:17