2009-06-15 2 views
3

IAuthorizationFilterを属性と組み合わせて、コントローラがそのコースを実行する前にユーザーがログインしているかどうかを確認することをお勧めしますか?ASP.Net MVC:IAuthorizationFilter /属性はログインのセキュリティチェックを優先しますか?

私はMVCを初めて使用しているので、私はWebFormsで行われた状況をどのように処理するかを理解しようとしています。私が昨日遭遇したのは、ログインしているかどうかによって、ユーザーがページを見ることができるかどうかを調べることです。私のプロジェクトを取り上げ、それをMVCプロジェクトに「変換」するとき、私はこの状況をどのように解決するかについて少し不安でした。 Webフォームバージョンで

は、私は、ユーザーがログインしたかどうかを確認するために、ベースページを使用:

if (State.CurrentUser == null) 
{ 
    State.ReturnPage = SiteMethods.GetCurrentUrl(); 
    Response.Redirect(DEFAULT_LOGIN_REDIRECT); 
} 

私が見つけた何これです:

[AttributeUsage(AttributeTargets.Method)] 
public sealed class RequiresAuthenticationAttribute : ActionFilterAttribute, IAuthorizationFilter 
{ 
    public void OnAuthorization(AuthorizationContext context) 
    { 
     if (State.CurrentUser == null) 
     { 
      context.Result = 
       new RedirectToRouteResult 
       (
       "Login", 
       new RouteValueDictionary 
       (
        new 
        { 
        controller = "Login", 
        action = "Error", 
        redirect = SiteMethods.GetCurrentUrl() 
        } 
       ) 
      ); 
     } 
    } 
} 

その後、私はちょうどその属性を平手打ちどんなコントローラー方法でも、人生は良いです。問題は、これを行うのが好ましい方法ですか、あるいは最良の方法ですか?

答えて

2

ホイールを改造しないでください。 MVCフレームワークにはすでに、AuthorizeAttributeが含まれています。ここでは、キャッシュなど、ここに貼り付けたコードに含まれていない微妙な部分を処理します。ただそれを使用してください。しかし、はい、属性は行く方法です。

+0

しかし、Authorize属性は何をしますか?役割メンバーシップ要件、またはカスタム認証HTTPヘッダーはどうですか? –

1

FilterAttributesを使用してコントローラのアクションを保護することは有効です。

+0

ここでは、コントローラのアクションを保護するための良いブログ記事があります:http://blog.wekeroad.com/blog/aspnet-mvc-securing-your-controller-actions/ – Ropstah

+1

私はその記事がMVC 1 –

関連する問題