2012-03-30 12 views
8

私のSymfony 2プロジェクトでは、エンティティに関する情報を表示するページがあります。このページには、このエンティティに関連付けられたファイルへのリンクもあります。Symfony 2のダウンロードリンクを確保

ページは保護されており、ユーザーが特定の役割を果たす場合にのみ表示されます。予想される役割はすべてのエンティティで同じではないため、アクション内でダイナミックにテストされています。

私の問題は、ページが保護されていても、誰もがそのURLを使ってファイルにアクセスできることです。ロールがページ表示のロールと一致する場合にのみ、ダウンロード可能にしたいと思います。

私はどのようにすべきか、どこから探し始めるべきですか?

+6

)'、彼らがダウンロードするセキュリティ要件を満たしている場合ファイル。 – halfer

答えて

14

ファイルをパブリックディレクトリの外部に移動し、URL経由でアクセスできないようにします。コントローラでは、ユーザーが正しいアクセス権を持っている場合は、ユーザーがファイルをダウンロードできるようにします。

あなたのコントローラでこれを使用することもできます

$headers = array('Content-Type'  => 'application/pdf', 
       'Content-Disposition' => 'inline; filename="file1.pdf"'); 

return new Response(file_get_contents($file), 200, $headers); 
は、Webルートの外にファイルを移動し、 `のReadFileを(使用してユーザーに送信
+1

質問を投稿してから数時間後にその実装についても考えました。とにかく、それを実行するにはどうしたらいいですか? – skwi

+2

上記のコードの改善点の1つは、StreamedResponseを使用してコンテンツを本体SF 2.1の一部として出力することだけです。http://symfony.com/doc/current/components/http_foundation.html#streaming-a-response – Josiah

+0

Webサーバーの上にあるコードでは、$ fileのファイルサイズと同じ量のメモリが必要であるため、常にストリームする必要があります –

関連する問題