15

MVC3アプリケーションとTPTBをビルドすると、カスタム認可プロバイダを使用することができます。しかし、開発中に、この認証プロバイダは、ブラウザをシャットダウン/再起動するまでエラーを出すか、すべてのコンパイル時に再ログオンする必要があるため、痛みを感じます。開発中に[Authorize(Roles = "")]をバイパスまたはオフにしますか?

今のところ、web.configに<authentication mode="None"/>を追加しました。これは、[Authorize(Roles = "Admin")]フィルタを使用するアクションまたはコントローラ(管理者だけでなく、任意の役割)に遭遇するまで機能します。それらのいずれかを押すと、空白のページがレンダリングされます。

これらのフィルタをグローバルに一時的にオフにする方法はありますか?または、私が開発中にユーザーにすべての役割を与えるだけですか?

EDIT

私は実際にMVC3にMVC2から大規模なアプリを超える移植していclarify-してみましょう。それには[Authorize(Roles="Admin")][Authorize(Roles="Admin,Editor")]がたくさんあります。私は、できるだけそれらのすべてを変更するつもりはない。

すべての役割を自動的に与える小さなカスタムロールプロバイダを作成してください。

+1

杏里の答えは、良いです。 – AgentFire

答えて

22

あなたは、要求がlocalhostから来ている場合は任意のチェックを実行しませんフィルターを許可するカスタムを書くことができ:

public class MyAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     if (httpContext.Request.Url.IsLoopback) 
     { 
      // It was a local request => authorize the guy 
      return true; 
     } 

     return base.AuthorizeCore(httpContext); 
    } 
} 
+0

ありがとう、これは私がやったことです。私はすぐに、Authorize属性の検索/置換が、私が検討していた何よりもずっと簡単であることを認識しました! –

+2

Request.IsLocalをチェックするのはどうですか?私はそれがもっと「防弾」だと思う。 – mare

+0

ブロックする場合は、リターン全体に#if DEBUGを追加する必要があります。そうしないと、本番環境でデータ損失の可能性があります。何が悪い管理者が生産と入力でIEに行くのを止めるのですか?http://127.0.0.1/refundCC?CC=1234689&amount=infinity – stevieg

12

あなたは#if DEBUGディレクティブでAuthorizeAttribute、別の実現を継承することができます。

public class MyAuthorizeAttribute: AuthorizeAttribute 
{ 
#if DEBUG 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     return true; 
    } 
#endif 
} 

または#define YOUR_OWN_FLAGビルド、デバッグまたはリリースで動作をオンまたはオフにすることができます。ウェブAPIについては

5

:それは、サーバー上の管理者権限を取得するために利用するHTTPプロキシを使用することはできませんので

public class MyAuthorizeAttribute : System.Web.Http.AuthorizeAttribute 
{ 
    protected override bool IsAuthorized(HttpActionContext actionContext) 
    { 
     return actionContext.Request.RequestUri.IsLoopback || base.IsAuthorized(actionContext); 
    } 
} 
+0

ループバックのテストはすごく面白いです –

関連する問題