ファイルを公に公開するのではなく、プライベートな場所 (web
ディレクトリの外) に保存し、バンドルとコントローラーを作成し、コントローラーにファイル ID を取得してそのアクセス レベルを検索するアクションを設定します。データベーステーブルから。ファイルが公開されている場合は、それを提供します。そうでない場合は、ユーザーがファイルを表示する権限を持っていることを確認してください。
必要な作業は、File
エンティティと、それらのファイルに対するユーザーまたはユーザー ロールのアクセス許可を格納するテーブルを作成して、要求に応じてクロスチェックできるようにするだけです。
ただし、完全な Symfony2 リクエストを実行する必要があるため、ファイルの提供にいくらかのオーバーヘッドが追加されますが、Apache または nginx を介してファイルを直接提供する場合、フレームワーク スタックのオーバーヘッドはありません。
うまくいけば、私はそれを十分に説明しました。
編集:
これらの画像をトークンを使用して (たとえば、電子メール経由で) 提供している場合は、次の行に沿って何かを行うことができます...
画像src
属性の例: http://yourdomain.com/assets/12/TOKEN
このルート構成は次のようになります (YAML で):
assets_serve:
pattern: /assets/{id}/{token}
defaults: { _controller: AcmeAssetBundle:Assets:serve }
requirements:
_method: GET
には、アクションAcmeAssetBundle
を持つ があります。AssetsController
serve
class AssetController extends Controller
{
public function serveAction($id, $token = null)
{
//fetch asset record from the database -- which also contains its file path
//check the TOKEN matches the one stored against this image
//set content-type headers and serve the image
}
}