3

私が構築しているASP.NET MVCサイトには、それらを使用するユーザーが特定の役割を果たさなければならないいくつかの方法があります(たまたま、そうでない場合は、サイトから停止されていることを意味します) . これを達成するために、[Authorize(Roles="RoleName")]問題なく属性を使用しています。

[Authorize]しかし、そのチェックに合格しなかったユーザーがどうなるかはよくわかりません。彼らは何を示していますか?

一時停止中のユーザーがこれらのメソッドを使用しようとした場合、別のアクションにリダイレクトしたいと考えています。今のところ、[Authorize](ロールを指定せずに) 空白の属性を使用してから、ユーザーがロールの一部であるかどうかをアクション コードでチェックしています。

私のアプローチはコードの匂いのように感じます。ユーザーがチェックに合格しなかった場合に、ユーザーに何を表示するか (またはどこにリダイレクトするか) を指定することはできます[Authorize]か?

4

2 に答える 2

4

AuthorizeAttribute MSDN ページに記載されているとおり:

認証されていないユーザーが Authorize 属性でマークされたメソッドにアクセスしようとすると、MVC フレームワークは 401 HTTP ステータス コードを返します。サイトが ASP.NET フォーム認証を使用するように構成されている場合、401 ステータス コードにより、ブラウザーはユーザーをログイン ページにリダイレクトします。

フォーム認証を使用していて、ログイン ページにリダイレクトしたい場合は、何もする必要はありません。それ以外の場合は、独自に実装IAuthorizationFilterしてリダイレクトを行います。

編集:基本的に AuthorizeAttribute を手動で再実装し、カスタム リダイレクトを使用するこのブログ投稿を参照してください。

于 2010-06-20T15:37:22.757 に答える
1

独自のIAuthorizationFilterを実装したくない場合は、Authorize属性のデフォルトの動作をオーバーライドできるはずです。HandleUnauthorizedRequestメソッドを継承してオーバーライドするだけです。確かに、ログインしていないためにユーザーが失敗したのか、適切な権限がないために失敗したのかを判断する方法が必要です。独自の承認フィルターを作成するだけの方がクリーンな場合があります。

于 2010-06-21T03:23:50.520 に答える