2012-04-20 12 views
0

MVC3アプリケーションでグローバル認可のためにAuthorizeAttributeから派生したクラスを使用しています。許可の失敗の理由を見つける方法

[CtsAuthorize(Roles = "systemadmin")] 
public class CompanyController : CtsController 

私はにリダイレクトしたい:私は今、私は、カスタムロールプロバイダを実装していると、コントローラ上で、より具体的な認証フィルタを配置開始したいと思い、このようfilters.Add(new CtsAuthorizeAttribute());

を介してグローバルフィルタとして使用しますロールベースの認証失敗のメッセージページ(理想的には、失敗したページのモデルプロパティを変更するだけです)が、ログインベースの失敗のログインページへのデフォルトのリダイレクトを保持します。以下の私のオーバーライドでは、認証の失敗の理由をどのように判断できますか?

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
{ 
    base.HandleUnauthorizedRequest(filterContext); 
} 

「ロールインのユーザー」チェックを複製できますが、これはこのフィルタで実行されたばかりです。私はちょうどフィルタからこれを学ぶ方法を見つけることができません。

+0

「承認の失敗」とはどのようなことを考えていますか?これで認証失敗をグループ化していますか? –

+0

@JeremyHolovacsでは、グローバルフィルタをそのまま使用して、リクエストが認証されていないときと、ユーザが指定されたロールにいないときにフィルタを 'Roles'で適用すると失敗します。 – ProfK

+0

認証と認可を区別しないためのMSセキュリティフレームワークには障害があります。これはまったく異なるものです。私は短い答えは、ユーザーが認証されているかどうかを確認する(これはコンテキストを通して利用可能でなければならない)かどうかを確認し、役割をチェックする。これはあなたが探している細かさのレベルですか? –

答えて

0

ユーザーが提供されたコンテキスト引数で認証されているかどうかを確認できます。役割はローカルで決定できます。

+0

ありがとう。私はロールを決定する必要はありませんが、属性はすでに 'HandleUnauthorizedRequest'を呼び出す前にそれを行います。 – ProfK