3

[Authorize]アクセスを制限するためにコントローラーとアクションの属性を叩くのは素晴らしいことです。

MVC 2のエリア全体で同等のことを行うことは可能ですか?すべてのコントローラー全体に散らかすのではなく、役割/ユーザー/中央の場所にあるものに応じて、エリア全体のアクセスを制限できる場所はどこですか?

4

2 に答える 2

7

エリア内のすべてのコントローラーが派生する、この属性で装飾されたベースコントローラーを使用できます。

于 2010-08-26T18:41:37.593 に答える
1

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;
    }
}
于 2015-09-11T01:19:26.210 に答える