如何在整个ASP .NET MVC应用程序中进行授权

我创建应用程序,除了那些启用登录的操作之外的每个操作都应该超出未登录用户的限制。

我应该在每个class级的标题之前添加[Authorize]注释吗? 像这儿:

 namespace WebApplication2.Controllers { [Authorize] public class HomeController : Controller { public ActionResult Index() { return View(); } public ActionResult About() { ViewBag.Message = "Your application description page."; return View(); } public ActionResult Contact() { ViewBag.Message = "Your contact page."; return View(); } } } 

或者有一个捷径? 如果我想在特定控制器中更改一个且仅限操作的规则,该怎么办?

最简单的方法是在filter配置中添加Authorize属性,以将其应用于每个控制器。

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

另一种方法是让所有控制器inheritance自基类。 这是我经常做的事情,因为几乎总有一些共享代码,我的所有控制器都可以使用:

 [Authorize] public abstract class BaseSecuredController : Controller { //Various methods can go here } 

现在,所有控制器都应该inheritance这个新类,而不是inheritance自Controller

 public class MySecureController : BaseSecuredController { } 

注意:当您需要非登录用户可以访问时,不要忘记添加AllowAnonymous属性。

为了构建DavidG的答案,如果您需要某个角色(例如,在Windows authentication ,每个人都获得授权),您可以执行以下操作:

 public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new AuthorizeAttribute { Roles = "MyApp Access" }); } }