我正在使用MVC 5来构建应用程序。在我的web.config中,我定义了一个自定义部分,该部分将用于向用户显示菜单。就像这样:
<Menus>
<Menu>
<MainMenu Title="Home"></MainMenu>
<SubMenus>
<SubMenu Title="Page1" PageName="home/index" ADGroup="BusinessUsers">
<SubMenu Title="Page2" PageName="home/index2" ADGroup="ITUsers">
</SubMenus>
</Menu>
<Menu>
<MainMenu Title="About Us"></MainMenu>
<SubMenus>
<SubMenu Title="Another Page1" PageName="about/mypage1" ADGroup="BusinessUsers">
<SubMenu Title="Some Other Page" PageName="about/mypage2" ADGroup="OtherUsers">
</SubMenus>
</Menu>
</Menus>
我正在使用Windows身份验证,每个人都可以通过AD组进行访问。默认情况下,我拒绝使用web.config中的授权规则访问所有用户,如下所示:
<authorization><deny users="*"/></authorization>
是否可以在运行时根据以上Application_Start
中的MENU定义授权规则?像这样:
Global.Filters.AuthorizeUser("BusinessUsers", "home/index, about/mypage1");
Global.Filters.AuthorizeUser("ITUsers", "home/index2");
答案 0 :(得分:0)
您在此处执行的操作不是定义菜单的标准方法,因此没有在其上执行授权的标准方法。您需要自己实施。
在请求过程中的代码中,您将必须遍历每个子菜单,并使用HttpContext.Current.User.IsInRole("DOMAIN\\GroupName")
测试用户是否在适当的组中。在没有看到更多代码的情况下,我无法为您提供其他指导。
我确定您有理由将其放入web.config,但是我在自己的项目中所做的工作是在局部视图中定义菜单,然后在视图中检查角色:
@if (HttpContext.Current.User.IsInRole("DOMAIN\\GroupName") {
<a href="/something">Some menu item</a>
}
如果您担心能够在不重新编译整个项目的情况下更新菜单项,那还是可以的,因为cshtml文件不会被编译-您可以随时对其进行更新。