根据用户自定义组显示和隐藏_layout视图部分

时间:2013-07-18 15:53:02

标签: asp.net-mvc

我创建了自己的用户权限表,其中每个用户可以属于许多组和许多安全角色。但我有以下作为我的_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)。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

看到你的用户信息没有在应用程序中处理,我没有看到你可以访问_layout文件中的用户安全权限的方法,因为它是最先加载的东西之一。

为什么不将您当前在_layout文件中的内容移动到局部视图中,然后创建另一个相同的部分视图,但不包括您要隐藏的任何权限。然后,您可以强烈键入视图并选择在需要的地方渲染每个部分。给定,您需要在每次加载页面时渲染部分,但是您可能也可以使用模型和帮助程序(IsAdmin等)来决定要渲染的部分。

如果您真的对转到_layout页面感兴趣,请尝试为特定模型强烈键入整个布局。有关详细信息,请参阅http://philjthorne.blogspot.com/2012/05/strongly-typing-aspnet-mvc-masterlayout.html的“Razor View引擎”部分。