2013-07-18 153 views
0

我創建了我自己的用戶權限表,其中每個用戶可以屬於多個組和許多安全角色。但是,我有以下爲我_layout視圖的一部分: -基於用戶自定義組顯示和隱藏_layout視圖部分

<li class="nav-header hidden-tablet"style="background-color:#3E9BD4 ; color:white">User Section</li> 
<li><a class="ajax-link" href="~/Home/Contact"><i class="icon-home"></i><span class="hidden-tablet">contact</span></a></li> 

<li class="nav-header hidden-tablet"style="background-color:#3E9BD4 ; color:white">Administration Section</li> 
<li><a class="ajax-link" href="~/SecurityGroup/"><i class="icon-home"></i><span class="hidden-tablet">Security Groups</span></a></li> 
<li><a class="ajax-link" href="~/SecurityRole/"><i class="icon-home"></i><span class="hidden-tablet">Security Roles</span></a></li> 
<li><a class="ajax-link" href="~/AuditInfo"><i class="icon-home"></i><span class="hidden-tablet">Audit</span></a></li> 
<li><a class="ajax-link" href="~/SecurityGroup/ADUsers"><i class="icon-home"></i><span class="hidden-tablet">Active Directory</span></a></li> 

那麼如何只有在當前用戶屬於與或命名爲「管理員」預定義的安全角色相關的集團我可以顯示管理部分直接與這個安全角色相關聯。

由於用戶存在於Active Directory中,因此我沒有在應用程序內存儲任何用戶信息。所以,我有以下型號類別: -

public partial class Group 

    { 

     public Group() 

     { 

      this.UserGroups = new HashSet<UserGroup>(); 

      this.SecurityRoles = new HashSet<SecurityRole>(); 

     } 



     public int GroupID { get; set; } 

     public string Name { get; set; } 

     public string Description { get; set; } 

     public byte[] timestamp { get; set; } 



     public virtual ICollection<UserGroup> UserGroups { get; set; } 

     public virtual ICollection<SecurityRole> SecurityRoles { get; set; } 

    } 

    public partial class UserGroup 

    { 

     public int GroupID { get; set; } 

     public string UserName { get; set; } 



     public virtual Group Group { get; set; } 

    } 

} 



public partial class SecurityRole 

    { 

     public SecurityRole() 

     { 

      this.SecurityroleTypePermisions = new HashSet<SecurityroleTypePermision>(); 

      this.SecurityRoleUsers = new HashSet<SecurityRoleUser>(); 

      this.Groups = new HashSet<Group>(); 

     } 



     public int SecurityRoleID { get; set; } 

     public string Name { get; set; } 

     public string Description { get; set; } 

     public byte[] timestamp { get; set; } 



     public virtual ICollection<SecurityroleTypePermision> SecurityroleTypePermisions { get; set; } 

     public virtual ICollection<SecurityRoleUser> SecurityRoleUsers { get; set; } 

     public virtual ICollection<Group> Groups { get; set; } 

    } 

public partial class SecurityRoleUser 

    { 

     public int SecurityRoleID { get; set; } 

     public string UserName { get; set; } 



     public virtual SecurityRole SecurityRole { get; set; } 

    } 

霸菱記住,_layout的看法是不是一個強類型的視圖,所以我不能夠定義的模型級輔助方法,如公共布爾IsAdmin(用戶名字符串)。

在此先感謝您的幫助。

回答

0

由於您的用戶信息未在應用程序中處理,所以我沒有看到您可以在_layout文件中訪問用戶安全權限的方式,因爲它是加載的第一件事情之一。

爲什麼不將你當前在_layout文件中的內容移動到局部視圖中,然後創建另一個完全相同的局部視圖,但不包括任何想要隱藏的權限。然後,您可以強制輸入視圖並選擇在需要的位置渲染每個部分。考慮到,每次加載頁面時都需要渲染一個局部區域,但是您可能會使用模型和幫助程序(IsAdmin等)來決定渲染哪個局部區域。

如果您真的對_layout頁面感興趣,請嘗試強制輸入特定模型的整個佈局。有關更多信息,請參閱http://philjthorne.blogspot.com/2012/05/strongly-typing-aspnet-mvc-masterlayout.html的「Razor View Engine」部分。

+0

所以你認爲沒有其他的方法來實現這一點,但使用應該在我當前每個視圖上調用的部分視圖? –

+0

我不是說這是不可能的,但我認爲這是一個簡單的解決方案。 _layout是頁面上的第一個渲染調用之一,因此很難將模型代碼放入。那是什麼部分意見。 – ElliotSchmelliot

+0

查看我對強類型佈局和母版頁的編輯。我希望這有幫助! – ElliotSchmelliot