【问题标题】:MVC 4 Restrict all actions/controllers unless ADMIN or role/user allowedMVC 4 限制所有操作/控制器,除非管理员或角色/用户允许
【发布时间】:2013-04-28 09:08:52
【问题描述】:
我正在 VS 2010 上开发 MVC 4 Web 应用程序。我想做的是:
- 限制对所有用户的访问,除非您自动成为 SUPERADMIN(使用表单身份验证登录)
-
如果操作/控制器声明您可以访问特定角色,那么它会授予他们访问权限。例如:
[AuthorizeFor(Roles = "REVIEWER")]
public ActionResult Index()
{
return View();
}
在上述情况下,只有具有 SUPERADMIN 或 REVIEWER 角色的用户才能访问此操作。
我还将使用 WEBAPI,因此我可以将内容推送给第三方,因此任何人都应该可以访问,但他们需要通过带有 hmac 的 url 参数进行身份验证。例如:http://example.com/api/feed/1?appid=BLAH×tamp=BLAH&hmac=BLAH。简而言之,网站的 API 部分不应使用与其他部分相同的身份验证。
我该如何设置?
我正在构建一个供内部使用的内容管理系统,API 会将我们输入的数据提供给第三方网站/供应商。
【问题讨论】:
标签:
asp.net-mvc
content-management-system
authorization
【解决方案1】:
您可以在 App_Start/FilterConfig.cs 中添加 GlobalFilterCollection:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
// Applies an Authorize Attribute to each controller so that by default all SUPERADMINS have access you could then add [Authorize(Roles = "REVIEWER"] to individual items.
filters.Add(new System.Web.Mvc.AuthorizeAttribute() { Roles = "SUPERADMIN" });
}
}
在 WebAPI 控制器中,您可以使用 WebAPI 控制器的 [AllowAnonymous] 属性并通过检查 hmac 参数自行处理身份验证。