2013-07-18 154 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