4

デフォルトの ASP.NET 承認ロール マネージャーを使用せずに特定のユーザーにのみ表示されるように ELMAH を構成するにはどうすればよいですか?

私は (他の多くの人と同様に) 独自の承認ロジックを使用し、提供されたテンプレートを使用せずにゼロからプロジェクトを構築しています。エラーをログに記録したいのですが、ELMAH (何らかの方法でオーバーライド機能) を構成して、他の認証で機能させたり、特定の IP アドレスに対してのみ機能させたりすることはできないようです。

アクセスできるのでweb.config、デフォルトで elmah を表示しないようにこれらの値を変更しようとしました。

<add key="elmah.mvc.disableHandler" value="false" />
<add key="elmah.mvc.disableHandleErrorFilter" value="false" />
<add key="elmah.mvc.requiresAuthentication" value="false" />

エラーを表示したい場合は、に切り替えてエラーを表示してからtruefalse元に戻します。しかし、これらの値を変更すると、すべてのログが消去されるようです。

私に何ができる?

4

3 に答える 3

8

ELMAH認証が機能するように、カスタム認証に若干の変更を加えるのが最も簡単なアプローチだと思います。

オプション1:ログイン時にFormsAuthenticationCookieを設定します。このように、web.configでが機能するallow users="username"はずです。ログインに成功すると、 FormsAuthentication.SetAuthCookie(theUsername、true)を使用してCookieを設定できます。

ELMAH認証は次のようになります。

<location path="elmah.axd" inheritInChildApplications="false">
    <system.web>
       <authorization>   
         <allow users="theUserName" />
         <deny users="*" />
       </authorization>
    </system.web>
  ...other config settings
</location>

オプション2:ユーザーをロールに入れることを使用している場合は、デフォルトのロールプロバイダーをオーバーライドして、ロールを取得するために作成した関数を使用できます。この方法はもう少し複雑ですが、web.configでロールベースの認証を利用できます。これは、静的ファイル(.pdfなど)の配信などを保護するのに非常に便利です。興味があれば、このためのコードを追加できます。

于 2013-01-23T14:18:28.723 に答える
6

私は ASP.NET Identity Framework を使用していたので、この回答はそのセットアップに関するものです。NuGet の Elmah.MVC パッケージも使用しました。web.config で次の行を編集しました。(設定で独自のユーザー名を指定する必要がありallowedUserます)

<add key="elmah.mvc.requiresAuthentication" value="true" />
<add key="elmah.mvc.allowedRoles" value="*" />
<add key="elmah.mvc.allowedUsers" value="your_user_name" />

ELMAH は現在のスレッド プリンシパルから認証情報を取得しているようです。これは、ログイン時に ASP.NET Identity Framework によって確立されます。

于 2015-02-26T03:13:30.357 に答える
4

この場合、システムがユーザー名またはロールをどのように取得するかは問題ではありません。組み込みのプロバイダーからのものか、自分で実装するプロバイダーからのものか、カスタム認証中にこの情報を自分で入力するかどうか。Application_PostAuthenticationRequest必要なのは、イベントのようなものの間に手動でプリンシパルを設定することです。これはあなたにそれの要点を与えるはずです。

protected void Application_PostAuthenticateRequest(object sender, EventArgs e)
{
    //Obtain username and roles from application datastore and use them in the next line
    Thread.CurrentPrincipal = new GenericPrincipal(
        new GenericIdentity("userNameHere"),
        new string[] { "Admin", "CanDeleteStuff", "CanEditStuff", "OtherRole" }
    );
}

これにより、このようなものをあなたの中で使用できるようになりますweb.config

<location path="elmah.axd" inheritInChildApplications="false">
  <system.web>
    <authorization>
      <allow roles="Elmah"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>

User.IsInRole("CanEditStuff")コードで使用できることは言うまでもありません。

于 2013-01-23T15:30:33.243 に答える