2012-05-03 13 views
1

Windows認証とカスタムロールプロバイダを使用して内部(イントラネット)MVC3アプリケーションを構築しています。ユーザーが役割を要求されている限り、認証と役割プロバイダーは正常に機能します。MVC3での認証失敗の処理方法

たとえば、アプリケーションのユーザーがアプリケーション内のユーザーアカウントを管理できるようにするUserContollerがあります。明らかに、私はこのコントローラへのアクセスを制限したい。

私はこれを行う場合:

[Authorize] 
public class UserController : Controller 
{ 
    ... 
} 

その後、Windows認証が正常に動作し、ユーザーが透過的にログインしている

しかし、私は、ユーザーの特定のグループにコントローラを制限したいです。だから私はこれを行う:私の役割プロバイダーによって返されたロールのリストは、「USERADMIN」が含まれている場合

[Authorize(Roles="UserAdmin")] 
public class UserController : Controller 
{ 
    ... 
} 

を、その後、すべてが正常であると、ユーザは、コントローラへのアクセス権を取得します。

ただし、ユーザーがロールに属さない場合、ブラウザ(IE8とFF10でテスト済み)は資格情報の入力を求めます。これがキャンセルされた場合、サーバーは401エラーページを返します。

私の質問は、ユーザーが要求された役割にない状況をどのように処理して、アプリケーションのホームアクションやユーザーフレンドリーなメッセージを提供するための他のアクションに戻すかです。

答えて

4

またAuthorizeAttribute

オーバーライドHandleUnauthorizedRequest方法を継承するカスタム属性を作成することができ

0

web.configに、401の場合に表示するURLを指定できます。

<customErrors mode="RemoteOnly" defaultRedirect="/Error/"> 
    <error statusCode="401" redirect="/AuthorizationFailed"/> 
</customErrors> 
関連する問題