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

时间:2014-07-26 12:20:01

标签: 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();
        }
    }
}

还是有一个快捷方式?如果我想在特定控制器中更改一个且仅有一个操作的规则怎么办?

2 个答案:

答案 0 :(得分:37)

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

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

        //Add this line
        filters.Add(new AuthorizeAttribute());
    }
}

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

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

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

public class MySecureController : BaseSecuredController
{
}

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

答案 1 :(得分:10)

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

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

        filters.Add(new AuthorizeAttribute { Roles = "MyApp Access" });
    }
}