コンテンツタイプに基づいて特定のファイルへのアクセスを制限するにはどうすればよいですか?登録済みユーザー用のダウンロードセクションがあり、自分のサイトの外部にリンクが投稿されないようにしたい。
実装は 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;
}
}
drupal 7には、ファイルへのアクセスを制限するためのフックがいくつかあります。
これらのアクセスフックが機能するのは、ダウンロード方法がプライベートで、ファイルがプライベートパスにある場合のみです。
あなたの質問で言及しているように、あなたのケースで機能するはずの hook_file_download があります(ファイルがプライベートであると仮定します)。これは、誰かがリンクしているファイルが、sites/default/files/abc123.txtなどのどこかに公開されている場合は機能しません。
これらのプライベートファイルをフィールドにアップロードしている場合は、 hook_file_download_access の方が適切と思われます。これにより、ファイルが属しているフィールドと、このフィールドが使用されている関連エンティティが提供されるため、適切なアクセス関数を呼び出して、ユーザーがコード内にハードコードされたリストの代わりにフィールド。
ファイルへのリンクはそれだけです-リンク。リンクの場所を特定する方法はないと思います。ヘッダーを見ることができるかもしれませんが、これはおそらく機能しません。
ファイルへのリンクの場所を特定できる場合は、hook_file_downloadの使用がアクセス制御に適しています。