2012-02-09 1 views
1

私の状況です。ケースマネジメントを扱うウェブアプリがあります。それぞれの場合には、通常、いくつかのPDF文書があります。私の会社はこれらの文書を標準のファイリングキャビネットに保管していました。これは、私たちがウェブアプリケーションに行ってケース情報を見つけてから、ファイリングキャビネットに行くときに、ケースを調べなければならないときには、頭痛になりました。私はメソッドを開発して、ユーザーがWebアプリケーションを介してドキュメントをアップロードし、それらをリンクすることができるようにしたいので、Webアプリケーション上でそれを見つけるとリンクをクリックして関連するファイルを取得できます。フォーム認証のみを使用する場合は、機密のPDF文書(ファイルシステムとSQL)を保存する方法

ウェブアプリケーションでは、フォーム認証を利用しています。各ASPXページについて、私はクッキーをチェックし、もし存在すれば、彼らは行くのが良いです。それ以外の場合は、ログインページにリダイレクトされます。

しかし、私は今、ロードブロッキングを達成しました。 PDFをサーバーにアップロードするだけで、Casesテーブルにファイルサーバー上のドキュメントへのリンクを返す列を作成することを計画していました。この問題は、ユーザーがログインしていない(または退社している)場合に、リンクをコピーしてアドレスバーとBAMにコピーして貼り付け、そのケースのファイル情報にアクセスできるようにすることです。これは起こり得ません。

もう1つの解決策は、SQL Server 2008 R2にファイルを格納することです。しかし、私はパフォーマンスの問題などに関する多くの情報を読んだので、それが最善の解決策であるかどうかは完全にはわかりません。現在は唯一のものです。

他にどのようにこのシナリオを処理できるかについて誰かが考えているなら、私は大いに感謝します。

おかげで、 アンドリュー

+0

実際のMembershipProviderを使用していますか?その場合、web.configのauthorization要素を使用するのではなく、個々のWebページで許可を確認する理由は何ですか? http://msdn.microsoft.com/en-us/library/8d82143t.aspx – Dave

答えて

1

を参照してくださいあなたは本当にここに二つの異なる問題を扱っています。

保存場所に関しては、ファイルシステムに直接保存するか、SQL 2008のFileStream機能を使用して保存することができます。

私はそれらを確保するという観点から、フロイアンスリップが提案したのと同じようなものに行きます。ドキュメント名(またはSQL Serverに格納する場合はIDなどのその他のキー)を渡すページがあり、そのページでユーザーの承認を確認し、ファイルを読み取り、応答ストリームに戻します。

実際のフォーム認証と認証を使用するようにweb.configを更新して、毎回明示的にCookieを確認する必要はありません。これはasp.netプラットフォームによって処理されます。

+0

良い点。私はSQLのFileStream機能を実際に見たことはありません。もう少し調べてみると、正しい方向に進んでいるようです。これは間違いなく、真のフォーム認証を使用して変換する適切な時期です。そして、@ FreudianSlipのメソッドも実装すれば、私たちは素晴らしい形になると思います。ありがとう! – ajtatum

1

あなたは、代わりにリンクにPDF文書への直接リンクを作成する、すべてが良好であれば、その後、ファイルを供給し、任意の必要な資格情報を検証するスクリプトにそれを作ることができます。

http://link.to.pdf/servePDF.asp?docname=mycasedoc.pdf

servePDF.aspは、任意のセッション/クッキーを検証し、すべてがOKであればドキュメントをプッシュします。

+0

"docをプッシュ"する場所はどこですか? – AadhilRF

0

PDFを別のディレクトリに保存することをお勧めします。同じディレクトリにweb.configファイルを追加して、フォーム認証アクセスを指定します。たとえば、

<system.web> 
    <authorization> 
     <allow users="Foo"/> 
     <deny users="*"/> 
    </authorization> 
</system.web> 
+0

これは私の考えでもありましたが、各ページのクッキーをチェックする彼の記述は、実際にフォーム認証で動作するために必要なMembershipProviderを実際に使用しているのかどうか疑問に思いました。 – Dave

1

このようなものです。

using System.Net; 

string pdfPath = Server.MapPath("~/SomePDFFile.pdf"); 
WebClient client = new WebClient(); 
Byte[] buffer = client.DownloadData(pdfPath); 
Response.ContentType = "application/pdf"; 
Response.AddHeader("content-length", buffer.Length.ToString()); 
Response.BinaryWrite(buffer); 

このオプションを使用すると、ファイルの実際の位置を完全にわかりにくくすることができます。

+0

Response.Redirectを実行すると、リモートブラウザが新しいアドレスを取得し、認証せずに再利用できます。 – Dave

+0

本当に、私はその提案を削除します。 –

+0

私はこれをしばらく再生しましたが、正しい方向にあるかもしれません。Splash-Xとの組み合わせで – ajtatum

1

Global.asax Application_AuthenticateRequestイベントを使用して静的フォルダ(/ assets /など)に基づいてカスタムロジックを作成し、そこでカスタム検証を実行できます。

同様に、HTTPモジュールを登録して同じことを行うこともできます。 http://support.microsoft.com/kb/307996

また、与えられたパスへの要求を受け入れるようにHTTP Handelerを実装して、いくつかの検証を行うと、ジェフ・ターナーのような内容が提案されたファイルを返すことができます。文書に対する文書とセキュリティのためのストレージシステム:

http://support.microsoft.com/kb/308001

+0

本当に助言に感謝します。 HTTPモジュールまたはハンドラーのいずれも開発していない人物として、私はApplication_AuthenticationRequestイベントで何ができるかを見ていきます。 – ajtatum

関連する問題