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

Yod*_*oda 24 c# asp.net authorization asp.net-mvc-5

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

我应该[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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*idG 39

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

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

        //Add this line
        filters.Add(new AuthorizeAttribute());
    }
}
Run Code Online (Sandbox Code Playgroud)

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

[Authorize]
public abstract class BaseSecuredController : Controller
{
    //Various methods can go here
}
Run Code Online (Sandbox Code Playgroud)

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

public class MySecureController : BaseSecuredController
{
}
Run Code Online (Sandbox Code Playgroud)

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


Ser*_*gan 11

要建立DavidG答案,如果您需要某个角色(Windows authentication例如,在每个人都获得授权的情况下),您可以这样做:

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

        filters.Add(new AuthorizeAttribute { Roles = "MyApp Access" });
    }
}
Run Code Online (Sandbox Code Playgroud)