1

aspxページへのアクセスを制限するのは簡単です。コードビハインドでロールチェックロジックを使用するだけです。しかし、写真のようなリソースファイルには、役割チェックロジックを配置するためのコードがありません。アクセスを制限するにはどうすればよいですか?

4

1 に答える 1

2

まず、IISを設定する必要があります。IIS7 +をお持ちの場合は、簡単です。アプリプールをクラシックから統合パイプラインに変更します。これにより、管理対象モジュールとハンドラーを静的リソースファイルに適用できます。IIS6を使用している場合は、この記事を参照してください

次に、web.config(IIS7の場合)でこの設定を確認する必要がある場合があります。

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

FormsAuthのようなものは、ASPXなどの場合と同じように機能するはずです。つまり、たとえばweb.configを使用することによってのみ、許可されたユーザーへのパスを制限できます。

アップデート

以下のApertureのコメントに応えて:

を使用する以外にRoleProviders、ASP.NETは、Windows認証を使用するときにユーザーが属するグループを読み取るか、アプリケーション内の現在のIPrincipalを置き換えることによって、できればで手動で役割を変更することにより、プリンシパルの役割を把握できますAuthenticateRequest

Global.asax.cs

public void Application_AuthenticateRequest(object sender, EventArgs e)
{
    var application = sender as HttpApplication;
    var context = application.Context;

    if (!context.User.Identity.IsAuthenticated) return; // if the user hasn't been authenticated by another module such as FormsAuth, don't do anything further

    string[] roleNames = FindRolesForUser(context.User.Identity.Name); // this method you will create to figure out what roles the specified user has
    context.User = new GenericPrincipal(new GenericIdentity(context.User.Identity.Name), roleNames); // updates the current principal. 
}

さて、上記で指定した役割を確認する限り、いくつかの方法があります。JPG、GIF、JSなどで終わるパスを検索するカスタムHttpModuleを作成し、単にチェックすることができますcontext.User.IsInRolelocationまた、authorizationweb.configでとを使用することもできます。

   <location path="images">
      <system.web>
         <authorization>
            <allow users="?"/> <!-- or perhaps <allow roles="Admins" /> it's up to you -->
         </authorization>
      </system.web>
   </location>

つまり、統合パイプラインを構成するか、静的リソースをASP.NET ISAPIモジュールにマップするまで、静的リソースへの要求中にマネージコードを実行することはできません。だから、私の答えは適切です。

于 2012-06-16T01:55:43.610 に答える