2017-05-31 58 views
0

有沒有什麼辦法來檢查用戶是否在特定的角色嵌套?例如檢查用戶是否在角色或不是嵌套?

@if(User.IsInRole("Admin"){ 

    <div class="div1"> </div> 

    @if(User.IsInRole("AdminAssitant"){ 
    <div class="div2"> </div> 
    } 

} 

我的意思是我想說明兩個divs如果用戶Admin,只有div2否則顯示。我不想這樣創建:

@if(User.IsInRole("Admin"){ 

    <div class="div1"> </div> 
    <div class="div2"> </div> 
} 

@if(User.IsInRole("AdminAssitant"){ 
    <div class="div2"> </div> 
} 

因爲它只是一個示例,我有非常複雜的場景。

回答

1

角色是不是真的設計的嵌套。這通常是由於對「角色」的誤解。嚴格地說,角色只是一種特權:像CanEdit,CanDelete等等。它們應該被建立起來。因此,例如「管理員」只是具有一組所有可用角色的用戶。創建實際的Admin角色僅僅是暗示其他角色的成員資格的捷徑,因爲您偶爾會忽視爲系統中的每個「管理員」用戶分配一個新角色。

在像AdminAdminAssistant背景說起,你在組成員的境界,和組層次的性質。一個組可以成爲另一個組的一部分,並且權限向下流過所有級別。

在這裏回到你的實際問題,你只需要建模層次結構,因爲沒有辦法實際上施加角色的層次結構。這實際上意味着做這樣的事情:

@if (User.IsInRole("Admin") || User.IsInRole("AdminAssistant")) { 

    <div class="div1"> </div> 

    @if (User.IsInRole("AdminAssistant")) { 
     <div class="div2"> </div> 
    } 
} 

這樣一來,無論是角色將獲得DIV1,但只有AdminAssistant將得到DIV2。

+0

我試過這個但不工作。 –

0

因爲它是嵌套的,如果該角色不是admin,則不會檢查AssistantAdmin語句。因此,您將無法完全像這樣完成嵌套檢查。

+0

他的問題是處理基於角色的層次結構。他的例子是假設的,而不是「爲什麼這不起作用」 –

0

RolePrincipal.IsInRole方法不能讓您爬上或爬下角色層次結構。您可以使用RolePrincipal.GetRoles來獲取用戶所屬的所有角色的數組,並且如果該角色存在於該數組中,則可能會編寫您的安全性。

https://msdn.microsoft.com/en-us/library/system.web.security.roleprincipal.getroles(v=vs.110).aspx

別人會如何處理這個非常感興趣。在您查看

例子:

@{ 
    ViewBag.Title = "Example"; 
    string[] roles = ((RolePrincipal)User).GetRoles(); 
} 

@if (roles.Contains("Admin")) 
{ 
    <div class="div1">Weeee</div> 
    if (roles.Contains("AdminAssitant")) 
    { 
     <div class="div2">Whoooa</div> 
    } 
} 
+0

有沒有解決這個問題的方法? –

+0

您可以在您的視圖中進行如下操作: @ {ViewBag.Title =「Example」; RolePrincipal rp =(RolePrincipal)User; string [] roles = rp.GetRoles(); } @if(roles.Contains( 「管理」)){

Weeee
如果(角色。包含(「AdminAssitant」)) {
Whoooa
} } –

+0

更新原始代碼,所以你可以看到 –

相關問題