0

新しいプロジェクトでは Windows 認証を使用する必要があります。そのため、アクション メソッドで AuthorizeAttribute を使用し、おそらく限られた数のコントローラー アクション内でも使用します。

もちろん、うまく機能します。しかし、これをテストするには (単体テストと、この機能を統合する際の手動テストの両方で)、任意のロールを持つユーザーをシミュレートし、異なるロール間で頻繁に切り替えられる必要があります。

コントローラーの User オブジェクトを変更することはできません (読み取り専用です)。そのため、アプリ内のどこからでもアクセスできる IPrincipal を実装する偽のユーザーをどこから挿入できますか?

  • コントローラーアクションで
  • カスタム属性で

私はまだ DI フレームワークに飛び込んでいません。この時点で必要ですか? 強くお勧めする場合は、「貧乏人」の DI を介してこれを行う方法を知りたいと思います。

4

1 に答える 1

3

global.asax/ Application_PostAuthenticateRequest(object sender, EventArgs e)

このメソッドは、ASP.NETがプリンシパルを楽しんだ後に呼び出されます。

独自の役割のみを提供したい場合は、RoleProvider代わりに実装することができます。

アップデート

あなたはこれを行うことができます:

public void Application_PostAuthenticateRequest(object sender, EventArgs e)
{
    var principal = LoadFromTheDb();
    HttpContext.Current.User = Thread.CurrentPrincipal = principal;
}

そして、好きな場所でそのプリンシパルを使用できます。

runAllManagedModulesForAllRequestsweb.configを有効にしている場合は、他の操作を行う前に、ユーザーが最初に認証されているかどうかを確認する必要があります。

于 2012-11-09T14:26:21.650 に答える