ASP.NET MVC4 - 限制未登录用户的所有页面

Tra*_*ffy 2 c# security authentication asp.net-mvc

我正在使用ASP.NET MVC 4来构建一个简单的Intranet Web应用程序.我已经建立了登录系统并配置了RouteConfig.cs以将登录视图显示为"主页".

我的问题很简单:我还有其他观点,如果他们没有登录,"访客"就无法访问.为了执行测试,我尝试直接通过URL访问这些页面并且它可以工作.如何通过阻止访问所有页面(登录页面除外)来确保这一点?

我已经阅读了有关Web.config和授权的内容,但没有任何效果.有帮助吗?

编辑:正如Khanh TO所说,使用AutorizeAttribute是最好的方法.但是,我还有一点问题.当我以简单用户身份登录时,我应该无法看到管理页面(就是这种情况)但是当我尝试这样做时,它会将我重定向到登录页面(我已经登录了!) .我认为这是因为下面的代码.问题是,如果用户试图尝试未经授权的页面,我想重定向到主页.可以这样做吗?

这是我所说的代码:

<authentication mode="Forms">
      <forms loginUrl="~/User/Login" timeout="2880" />
</authentication>
Run Code Online (Sandbox Code Playgroud)

此外,我想要精确地将我的用户存储到一个简单的表中,其中角色由bool类型定义(isAdmin以了解用户是否是管理员).

Kha*_* TO 9

如果您需要有选择地为某些页面应用授权,请在控制器或操作方法上使用AuthorizeAttribute:

示例代码:

 [Authorize]
 public class SecuredController : Controller
  {
       public ActionResult Index()
       {
            return View();
       }

  }
Run Code Online (Sandbox Code Playgroud)

要么:

 public class SecuredController : Controller
   {
        [Authorize]
        public ActionResult Secure()
        {
            return View();
        }

        public ActionResult NonSecure()
        {
            return View();
        }
   }
Run Code Online (Sandbox Code Playgroud)

引自MSDN:

使用AuthorizeAttribute标记操作方法时,对该操作方法的访问仅限于经过身份验证和授权的用户.如果使用属性标记控制器,则控制器中的所有操作方法都受到限制.

Authorize属性允许您指示授权仅限于预定义角色或单个用户.这使您可以高度控制谁有权查看网站上的任何页面.

如果未经授权的用户尝试访问使用Authorize属性标记的方法,则MVC框架将返回401 HTTP状态代码.如果站点配置为使用ASP.NET表单身份验证,则401状态代码会导致浏览器将用户重定向到登录页面.

如果需要全局应用authorize属性,则登录页面除外.您可以将AuthorizeAttribute添加到全局过滤器,如下所示:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
  {
      filters.Add(new AuthorizeAttribute());
  }
Run Code Online (Sandbox Code Playgroud)

并将AllowAnonymousAttribute应用于您的登录视图:

public class AccountController : Controller
    {
        [AllowAnonymous]
        public ActionResult Login()
        {
            return View();
        }
    }
Run Code Online (Sandbox Code Playgroud)

在web.config中,启用表单身份验证:

<authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
Run Code Online (Sandbox Code Playgroud)