2010-09-02 47 views
2

我正在使用AzMan(1.0)爲一個ASP.Net Web應用程序,並且我有一個關於嵌套角色的問題。AzMan嵌套角色找不到用戶角色

說我有以下作用: MyApp的 MyAppUser MyAppAdmin MyAppSupport

在大多數情況下,所有用戶(MyApp的)可以訪問應用程序,但某些功能將特定於其他角色。

我想聲明性地限制對MyApp角色的成員訪問網頁。

[PrincipalPermission(SecurityAction.Demand, Role = "MyApp")] 

我會檢查User.IsInRole或使用AzMan API檢查我的代碼中的操作權限。

將用戶分配給較低級別​​的角色(用戶,管理員,支持),並將這些角色添加到MyApp角色。

問題是,當我檢查用戶是否是MyApp角色的成員時,他們不是,即使他們所在的角色屬於MyApp角色。是唯一的方法來檢查這是遞歸通過所有角色?這意味着我不能使用聲明性安全性,或者這樣做,我不得不將所有用戶添加到頂級組(也不是理想的)。

回答

1

聽起來好像您期望在調用IsInRole()時支持組合角色定義(其中角色定義被定義爲包括其他角色定義)。我想你會得到你想要的結果,如果你使用組繼承和角色分配來代替。

換句話說,不是依靠IsInRole來跟隨「MyApp」的角色定義來確定角色定義「MyAppAdmin」是該定義的一部分,而是使用Groups來創建繼承,然後分配一個或多個使用角色分配將組分配到您的角色定義。您可以創建一個「管理員」組,該組可能是「每個人」組的成員。

我真的認爲你的角色名稱真的是更好的組名。角色表示某些功能,而不是根據用戶權限對用戶進行分類。這是一個團隊的目標。

例如,假設大多數用戶(不是管理員或支持人員)對您的應用具有隻讀權限。我傾向於將該角色稱爲「查看器」,並將其分配給允許該角色的用戶僅查看,不編輯任何數據的任務或操作。我會把每個人都分配給這個角色(不管我只用一組還是幾組並不重要)。 「支持」角色允許分配給它的用戶執行某些操作(或任務分組操作)。只有一些人會被分配到這個角色(再次,也許他們是單獨分配的,或者我有一個名爲「客戶支持代表」的組 - 無所謂)。

在我的應用程序中,我可以檢查IsInRole("Viewer"),作爲用戶的每個人都將擔任該角色。但是,如果我檢查IsInRole("Support"),則只有分配給該角色的「客戶支持代表」組中的人員纔會返回True。