保护登录后面的整个网站,即“授权”所有控制器内的所有操作

时间:2010-11-04 00:07:43

标签: c# asp.net-mvc security model-view-controller authorization

标题几乎说明了一切。

我有一个只会在登录后运行的网站,所以我想确保除非您已登录,否则无法访问任何内容。这包括ActionResults,JsonResults等......

目前,我的控制器上[Authorize]非常繁琐且不是很干:)

那么我可以使用1行神奇的代码来保护整个网站吗? (显然需要登录页面)

此外,请注意我仍需要进一步保护某些仅供某些用户/角色使用的操作

3 个答案:

答案 0 :(得分:9)

如果您有多个控制器,那么创建一个AuthorizeController,您从该AuthorizeController继承必须受保护的控制器。只需将[Authorize]属性设置为AuthorizeController:

即可
[Authorize]
public class AuthorizeController: Controller
{
}

public class HomeController : AuthorizeController
{
    ...
}

// don't inherit AccountController from AuthorizeController
public class AccountController : Controller
{
    public ActionResult Login()
    {
        ...
    }
}

答案 1 :(得分:3)

如果您尝试保护整个网站,可以使用全局过滤器:

public class FilterConfig
{
  public static void RegisterGlobalFilters(GlobalFilterCollection filters)
  {
    filters.Add(new AuthorizeAttribute);
  }
}

有关详情,请参阅此处http://visualstudiomagazine.com/blogs/tool-tracker/2013/06/authenticating-users-in-aspnet-mvc-4.aspx

答案 2 :(得分:1)

没关系! 我想我找到了它!

[Authorize]置于Controller类之上似乎可以保护所有操作,并且可以基于每个操作进一步自定义。 是<!/强>

[Authorize]
public class SomeController : Controller 
{
    // All logged in users
    public ActionResult Index() 
    {
        ...
    }

    [Authorize(Roles="Admin")] // Only Admins
    public ActionResult Details() 
    {
        ...
    }
}