2009-09-08 95 views
2

我的應用程序需要在不同團隊的不同級別獲得安全保護的能力。例如,某人可能是一個團隊的管理員,但可能只是另一個團隊的查看者。asp.net會員/角色提供商問題

理想情況下,我想要一個單一的小組角色,但是我希望將人員分配給每個團隊的不同角色。即「Joe」可能是TeamA的管理員,但TeamB有Reader訪問權限。

Asp.Net提供者框架是否支持這個?

--Matt

更新:我的問題是與 「IsInRole」 的方法。它只需一個參數。除了黑客攻擊(連接兩個項目,如團隊ID和角色名稱),還有其他方法可以解決這個問題嗎?

回答

1

據我所知道的一個例子,有沒有組到角色中如何條款RoleProvider類的作品,但沒有理由不能在數據源中實現分組結構。然而,RoleProvider確實支持不同的應用程序名稱,所以有可能使用這種方式來將應用程序分割成邏輯組,這些邏輯組被識別爲不同的,因此分配了不同的角色。

編輯:

在回答您的編輯,你可以有結構爲數據庫中的如下

Group Table   Access Table   Role Table 
id | name    id | name    group_id | access_id | name 
-----------   ------------   --------------------------- 
1 Team A   1 Guest    1   1   Team A Guest 
2 Team B   2 User    1   2   Team A User 
         3 Admin    1   3   Team A Admin 

一個有當在Role表更新name領域的機制新行被插入。

實現一個自定義的RoleProvider非常簡單。您只需要從RoleProvider繼承並覆蓋所需的方法,即編寫RoleProvider應從中獲取數據的邏輯。

+0

謝謝Russ,那個DB結構類似於我認爲我必須使用的那個。我遇到的一個問題是調用者將傳遞給IsInRole。單個參數(角色名稱)可能不適用於我。 (我實際上已經簡化了我的問題,對於團隊來說也有一個層次結構)。無論如何,感謝您的意見。我認爲這(或類似的)將成爲我走的路線。 --- Matt – 2009-09-09 12:23:51

+0

@Matt - 將傳入的名稱將是RoleTable中的名稱,即if(User.IsInRole(「Team A Guest」))。 – 2009-09-09 13:41:17

+0

再次感謝拉斯。這也是我的想法(連接名稱)。我想我可以讓它工作,但感覺很難受。 – 2009-09-09 18:43:39

0

不是開箱即用。您需要創建一個自定義提供商支持此功能

這裏是創建一個自定義的成員提供 http://www.asp.net/learn/videos/video-189.aspx

+0

請參閱我在上面的主要問題中添加的關於「IsInRole」方法的註釋。 – 2009-09-08 21:18:21

+0

微軟設計它,以便您可以創建您自己的角色提供者。首先從RoleProvider繼承創建你自己的類,然後提供需要團隊id的方法,然後角色名稱 – clyc 2009-09-08 21:29:14

+0

你基本上必須編寫sql來做檢查 – clyc 2009-09-08 21:29:52