如何在Application_Start中的MVC中动态授权用户

时间:2018-12-11 15:53:07

标签: asp.net-mvc-5 active-directory asp.net-authorization role-base-authorization

我正在使用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");

1 个答案:

答案 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文件不会被编译-您可以随时对其进行更新。