标题几乎说明了一切。
我有一个只会在登录后运行的网站,所以我想确保除非您已登录,否则无法访问任何内容。这包括ActionResults,JsonResults等......
目前,我的控制器上[Authorize]
非常繁琐且不是很干:)
那么我可以使用1行神奇的代码来保护整个网站吗? (显然需要登录页面)
此外,请注意我仍需要进一步保护某些仅供某些用户/角色使用的操作
答案 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()
{
...
}
}