hook_file_downloadの例


8

コンテンツタイプに基づいて特定のファイルへのアクセスを制限するにはどうすればよいですか?登録ユーザー向けのダウンロードセクションがあり、自分のサイトの外部にリンクが投稿されないようにしたい。

実装はhook_file_download()十分ですか?

私はこのコードを試しましたが、それは私の目的には十分ですが、のドキュメントhook_file_download()はあまり役に立ちません。

function customize_file_download($uri) {
  global $user;
  if (!array_intersect(array('administrator','editor','expert','verified'), array_values($user->roles))) {
    return 1;
   }
}

たぶん私のポストの例と私はそれが私がCONTENT_TYPEの持っている、それを視覚化するのに役立ちます願っていたファイルフィールドファイル、私はそれ(ユーザーの役割に基づいて)権限のない者にアクセスすることから、このファイルを保護する必要があります(セット民間ダウンロード方法を)?最高のアプローチは何ですか?単に、ユーザーがhook_file_downloadで適切な役割を持っていることを確認してください。
パリ

回答:


8

drupal 7には、ファイルへのアクセスを制限するためのフックがいくつかあります。

これらのアクセスフックが機能するのは、ダウンロード方法がプライベートで、ファイルがプライベートパスにある場合のみです。

あなたの質問で述べているように、あなたのケースで機能するはずのhook_file_downloadがあります(ファイルがプライベートであると仮定します)。これは、誰かがリンクしているファイルが、sites / default / files / abc123.txtなどのどこかに公開されている場合は機能しません。

これらのプライベートファイルをフィールドにアップロードしている場合、hook_file_download_accessの方が適切と思われます。これにより、ファイルが属するフィールドと、このフィールドが使用されている関連エンティティが提供されるため、適切なアクセス関数を呼び出してユーザーがアクセスできるかどうかを確認するなど、より複雑なロジックを実行できるはずです。コード内にハードコードされたリストの代わりにフィールド。


プライベートファイルシステムでのhook_file_downloadは、匿名ユーザーに対しては呼び出されません。なぜだと思いますか?
Jeet

1
匿名ユーザーがプライベートファイルにアクセスすることは想定されていないためです。
DrCord 2014

0

ファイルへのリンクはそれだけです-リンク。リンクの場所を特定する方法はないと思います。ヘッダーを見ることができるかもしれませんが、これはおそらく機能しません。

ファイルへのリンクの場所を特定できる場合は、hook_file_downloadを使用してアクセス制御を行うことをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.