我创建了自己的用户权限表,其中每个用户可以属于许多组和许多安全角色。但我有以下作为我的_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>
因此,只有当前用户属于与名为“Admin”的预定义安全角色关联或直接链接到此安全角色的组时,才能显示管理部分。
我没有在我的应用程序中存储任何用户信息,因为用户存在于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视图不是强类型视图,因此无法在模型级别定义辅助方法,例如public bool IsAdmin(string userName)。
提前感谢您的帮助。
答案 0 :(得分:0)
看到你的用户信息没有在应用程序中处理,我没有看到你可以访问_layout文件中的用户安全权限的方法,因为它是最先加载的东西之一。
为什么不将您当前在_layout文件中的内容移动到局部视图中,然后创建另一个相同的部分视图,但不包括您要隐藏的任何权限。然后,您可以强烈键入视图并选择在需要的地方渲染每个部分。给定,您需要在每次加载页面时渲染部分,但是您可能也可以使用模型和帮助程序(IsAdmin等)来决定要渲染的部分。
如果您真的对转到_layout页面感兴趣,请尝试为特定模型强烈键入整个布局。有关详细信息,请参阅http://philjthorne.blogspot.com/2012/05/strongly-typing-aspnet-mvc-masterlayout.html的“Razor View引擎”部分。