2012-01-19 16 views
4

私は、登録ユーザーにファイルをアップロードさせる非常に簡単なサイトがあるとしましょう。私はIDが1のユーザ "andrew"とIDが2のユーザ "matt"を持っています。ASP.NET MVC 3静的ファイルのシンプルなシナリオ承認

ここでは、アップロードされたファイルを整理するために、次のフォルダ構造を使いたいとします。

/Content/DocRepo/[[ID]]/files_live_here 

私がアクセスDocRepoが、しかし、かつて「アンドリュー」はログインしているから不正ユーザーを防ぐために、Web構成location要素を使用することができますので、私は彼を防ぐために、クリーン/最も簡単な方法は何であるか、フォーム認証を使用しています「マットの」ファイルにアクセスすることはできませんか?

は、彼はちょうどそれを行う最も簡単な方法は、すべてのファイルへの直接要求を許可しないことである/Content/DocRepo/2/

+1

最初の手順では、IDの代わりにGUIDを使用できます。それでは、それ以上に各リクエストを安全にする必要があります。 –

答えて

7

にURLを変更できませんでした。ファイルディレクトリへの要求を防止し、Authを必要とするファイルコントローラを作成し、ユーザが要求しているファイルにアクセスできるようにします。

App_Dataのサブディレクトリを使用してファイルを保存することができます。デフォルトでは、そこに含まれているファイルに対して直接要求はできません。

+0

これについて考えると、これは適切な解決策であると私は同意します。 –

+0

ちょっとありがたいことに感謝します...何かのカスタムルートを使って/ Content/DocRepo /フォルダへのリクエストを防ぎたいのですか? – aherrick

+0

Web設定の問題は、フォーム認証を使用して、それらを/ loginページにリダイレクトしようとすることです。私は必ずしもそうしたくありません。私はしたいでしょう – aherrick

2

Global.asaxで、Application_AuthenticateRequestまたはApplication_BeginRequestで実行できます。また、IHTTPHandelerを登録し、Global.asaxと同じロジックを実行することもできます。これは、DocRepoフォルダの要求をリッスンしてユーザー権限監査を実行することです。

ASP.NET MVCを使用している場合は、何らかの種類のファイルIDを受け入れてそこで検証するダウンロードアクションをコントローラに簡単に作成できます。従来のASP.NETを使用している場合は、download.aspxにユニークなID(両方ともAndrewが示唆している)を取得するページを作成します。

MVCでは、認証されたユーザーだけを許可するアクションに承認フィルタを追加し、そこからユーザーごとのレベルチェックを実行できます。 MVCには、ファイル結果があります。

return File(...); 
+0

これらはうまくいくでしょう。彼はすでにmvcを使用しているので、私はコントローラを提案しました。とにかく、他のオプションの+1! –

+0

彼はMVCを使用していると指定しなかったので、MVCをオプションとして含めるように答えを更新しました。 MVCをURL構造からルートと見なすことができると思います。 –

+1

彼はタイトルでmvc3だと言った。 –

関連する問題