[Authorize]
アクセスを制限するためにコントローラーとアクションの属性を叩くのは素晴らしいことです。
MVC 2のエリア全体で同等のことを行うことは可能ですか?すべてのコントローラー全体に散らかすのではなく、役割/ユーザー/中央の場所にあるものに応じて、エリア全体のアクセスを制限できる場所はどこですか?
[Authorize]
アクセスを制限するためにコントローラーとアクションの属性を叩くのは素晴らしいことです。
MVC 2のエリア全体で同等のことを行うことは可能ですか?すべてのコントローラー全体に散らかすのではなく、役割/ユーザー/中央の場所にあるものに応じて、エリア全体のアクセスを制限できる場所はどこですか?
エリア内のすべてのコントローラーが派生する、この属性で装飾されたベースコントローラーを使用できます。
MVC 3以降の場合:
私はこれを始めたばかりです...しかし、これまでのところ、これは私にとってかなりうまく機能しています。
カスタムAuthorizeAttributeクラスを作成し、これをRegisterGlobalFilters関数に追加します。
CustomAuthorizeAttributeでは、その領域に基づいてさまざまな条件をチェックします。
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CustomAuthorizeAttribute());
filters.Add(new HandleErrorAttribute());
}
}
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var routeData = httpContext.Request.RequestContext.RouteData;
var controller = routeData.GetRequiredString("controller");
var action = routeData.GetRequiredString("action");
var area = routeData.DataTokens["area"];
var user = httpContext.User;
if (area != null && area.ToString() == "Customer")
{
if (!user.Identity.IsAuthenticated)
return false;
}
else if (area != null && area.ToString() == "Admin")
{
if (!user.Identity.IsAuthenticated)
return false;
if (!user.IsInRole("Admin"))
return false;
}
return true;
}
}