0

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

提前感谢您的帮助。

4

1 回答 1

0

鉴于您的用户信息没有在应用程序中处理,我看不到您可以访问 _layout 文件中的用户安全权限的方法,因为它是首先加载的内容之一。

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

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

于 2013-07-18T18:56:22.033 回答