2012-02-16 7 views
0

ASP.NET 3.5アプリケーションでは、次のシナリオがあります。ASP.NETファイルのカスタム承認モジュール

ユーザーは、ファイルをアップロードできる場所にフォルダを作成できます。

問題は、私がすることをしたいということで、

ホスト名/ UsersFolders/ユーザー1/Folder1に /requested_file_name.jpeg:ファイルがサーバのファイルシステムに保存されているとフォーマットでURLを要求することにより、ダウンロードすることができますユーザー1と他のユーザーユーザー1は、Folder1にあるファイルをダウンロードでき、他のユーザーはアクセスできません。

私はすでにユーザーとフォルダ間のn - n関係のビジネスロジックを実装していますが、今度はUsersFoldersという名前のフォルダにあるファイルへの要求を許可し、アクセスを許可または拒否しようとしていますどのユーザーがどのフォルダーを要求するかによって異なります。 これを行うにはどのような方法が最適ですか?

ありがとうございます。

答えて

0

私は多かれ少なかれ同じ結果を得ることができます。 HttpModulesはすべての要求に対してインスタンス化されるため、この方法の欠点は、要求されたリソースが公開されているかどうかにかかわらず、受信するすべての要求に対して絶対に認証メソッドを呼び出さなければならないということです(例:.js/ .cssファイル)。

<system.web> 
    <httpHandlers> 
    <add verb="GET" path="*" type="MyHttpHandler" /> 
    </httpHandlers> 
</system.web> 

ハンドラがだけインスタンス化され、このように:以下に示すよう

は私がインスタンス MyHttpHandlerとUsersFoldersフォルダに対応した設定ファイルを配置するという名前のHttpHandlerを書くより良い方法を考えますUsersFolderからのファイルが要求されたとき。

+0

ハンドラをインスタンス化することは、あなたが思っているほど大したことではありません。ハンドラは、特定のクラスの単なるオブジェクトです。何百ものオブジェクトが各要求に対してインスタンス化されています。それは問題ではありません。 – galets

0

私はたぶんHTTPModule like thisと書いて、着信要求を調べます。 URL要求が "UsersFolder"の子の場合、認証されたユーザーの資格情報を要求されたユーザーのフォルダーと比較します。アクセスできない場合は、HTTPエラーコード401を返します。

More info about HttpModules。単にAuthenticate_Requestイベント中Global.asaxのに要求ごとにURLをチェックすることにより、HttpModuleをを書くよう

+0

特定のフォルダに対してモジュールを構成して、すべての要求に対して絶対に実行されないようにすることは可能ですか? – user1213926