我目前正在編寫一個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