web-dev-qa-db-ja.com

AuthorizeAttributeオーバーライドAuthorizeCoreまたはOnAuthorizationの拡張

ASP.NET MVCを使用して、カスタムのAuthorize属性を作成して、いくつかのカスタムの承認ロジックを処理しています。多くの例を見てきましたが、それは非常に簡単ですが、私の質問は、AuthorizeCoreとOnAuthorizationのどちらのメソッドがオーバーライドするのに最適ですか?どちらか一方を上書きする多くの例を見てきました。違いはありますか?

55
Nick Olsen

手がかりは戻り型にあります:

AuthorizeCoreはブール値を返します。これは意思決定コードです。これは、ユーザーのIDを確認し、ユーザーがどのロールにいるかなどのテストに限定する必要があります。基本的には、次の質問に答える必要があります。

Do I want this user to proceed?

「サイド」で追加のアクティビティを実行しないでください。

OnAuthorizeはvoidを返します。ここに、この時点で発生する必要があるfunctionalityを配置します。例えばログへの書き込み、セッションでのデータの保存など.

76
BonyT

ユーザーが初めて承認されているかどうか、またはキャッシュされた承認をAuthorizeCoreで使用しているかどうかに関係なく、実行する必要があるコードを配置する必要があります。

ソースコードを見ると、AuthorizeCoreOnAuthorizeOnCacheAuthorizationの両方から呼び出されていることがわかります。これにより、承認をキャッシュできますが、特定のアクションを許可し、承認に関する実際の決定を行うことができます。

AuthorizationContextから何かが必要な場合は、情報を保持するプロパティを作成し、AuthorizeCoreメソッドでそれにアクセスできます。

16