0

我正在开发一个带有 Windows 身份验证的 MVC 内部网。

我有一个文件夹,其中包含只有某些角色才能看到的视图。

我在那个文件夹中有一个 web.config 文件

<?xml version="1.0"?>
<configuration>
    <system.web>
      <authorization>
        <allow roles="Administrator, ICCManager"/>
        <deny users="*"/>
      </authorization>
    </system.web>
</configuration>

我想编写代码来查看用户是否处于这些角色之一,如果没有将他重定向到信息页面。

这是我的第一个 MVC 项目,但我仍然不完全了解我的方式。所以我不知道在哪里实际编写这段代码。有点傻,我知道,但我还是不明白。

4

4 回答 4

1

您不必直接配置对视图的访问,您可以配置对将返回视图的操作方法的访问。

您可以通过使用 [Authorize] 属性装饰单个操作方法或整个控制器来做到这一点:

// All actions in this class cannot be called by anonymous users
[Authorize]
public class MyController {

    // This action is just callable by users in role Admin
    [Authorize(Roles="Admin")]
    public ActionResult MyAction() {
        return View();
    }

    // This action is callable by any authorized user (inherited from class)
    public ActionResult MyAction() {
        return View();
    }
}

// Actions from this controller can be called by any user (even unauthorized)
public calls AnotherController {
}

当不允许的用户尝试访问页面时,用户将被重定向到您在 web.configloginUrl中元素的属性中配置的操作:authentication

<authentication mode="Forms">
    <forms loginUrl="~/Membership/Login" ... />
</authentication>
于 2012-11-21T10:53:26.597 回答
0

在控制器方法上使用AuhtorizeAttribute设置对操作的限制,并在 web.config 中在身份验证标签中设置表单身份验证并将登录页面设置为您需要的页面。如果不是登录页面而只是信息,请打开 global.asax 并覆盖 Application_AuthenticateRequest 方法。

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
        if (User.Identity.IsAuthenticated)
        {
            //redirect
        }       
}
于 2012-11-21T10:58:36.280 回答
0

这可能是一个很好的起点:

http://theintegrity.co.uk/2010/11/asp-net-mvc-2-custom-membership-provider-tutorial-part-1/

您将希望实现一个成员资格提供程序,它可以确定用户具有哪些角色等。非常可定制。

于 2012-11-21T10:50:54.417 回答
0

检查特定用户数据库中记录的代码将在model类中,您可以将结果从那里返回给控制器。

controller你可以处理逻辑,比如如果用户没有被授权而不是将他重定向到信息页面,或者将他重定向到个人资料页面等。

欲了解更多信息,请阅读此内容,这将有助于清除有关 ASP MVC 的许多其他概念。

ASP.NET MVC 教程

于 2012-11-21T10:52:22.963 回答