我目前正在编写一个Admin MVC 3站点,并且每个用户只能访问站点的某些部分。asp.net MVC 3将AuthorizeAttribute应用到区域
我的网站的区域与用户角色相同,所以我想要做的是将AuthorizeAttribute放置在每个区域上,并使用该区域的名称作为角色中的参数。
到目前为止,当我对每个区域的检查进行硬编码时,我已经得到了这个工作,但我想循环遍历所有区域并应用Authorize过滤器。 (我用这个作为我的自定义FilterProvider - http://www.dotnetcurry.com/ShowArticle.aspx?ID=578)
到目前为止我的代码(“GCM”是我的领域之一,也是一个角色):
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
// for all controllers, run AdminAuthorizeAttribute to make sure they're at least logged in
filters.Add(ObjectFactory.GetInstance<AdminAuthorizeAttribute>());
AdminAuthorizeAttribute gcmAuthroizeAttribute = ObjectFactory.GetInstance<AdminAuthorizeAttribute>();
gcmAuthroizeAttribute.Roles = "Gcm";
var provider = new FilterProvider();
provider.Add(
x =>
x.RouteData.DataTokens["area"] != null && x.RouteData.DataTokens["area"].ToString() == "Gcm"
? gcmAuthroizeAttribute
: null);
FilterProviders.Providers.Add(provider);
}
有谁知道以获得我的应用程序的所有领域,所以我可以循环遍历它们,而不是对每个区域进行硬编码?
或者如果任何人有更好的想法如何授权每个区域,这将不胜感激。
感谢您的帮助 Saan
**警告:这不是安全的做法。**我一直在看这个相同的区域,发现这不是一个明智的做法。区域是一个路由概念,但是即使未指定区域,控制器也可以被发现并被拾取**。 [Levi在这里解释](http://stackoverflow.com/questions/2319157/how-can-we-set-authorization-for-a-whole-area-in-asp-net-mvc/2320419#2320419) – Quango 2013-01-25 08:18:31