Contoh hook_file_download

8

Bagaimana cara membatasi akses ke file tertentu berdasarkan jenis kontennya? Saya memiliki bagian unduhan untuk pengguna terdaftar, dan saya ingin mencegah mereka memposting tautan di suatu tempat di luar situs saya.

Apakah penerapannya hook_file_download()mencukupi?

Saya mencoba kode ini dan itu cukup untuk tujuan saya, tetapi dokumentasi hook_file_download()tidak banyak membantu.

function customize_file_download($uri) {
  global $user;
  if (!array_intersect(array('administrator','editor','expert','verified'), array_values($user->roles))) {
    return 1;
   }
}
Pari
sumber
Mungkin saya memposting contoh dan saya harap ini membantu memvisualisasikannya saya memiliki file content_type dengan file field (mengatur metode unduhan pribadi) maka saya perlu melindungi file ini dari mengaksesnya orang yang tidak sah (berdasarkan peran pengguna)? Apa pendekatan terbaik? Cukup periksa apakah pengguna memiliki peran yang tepat dalam hook_file_download dan hanya itu saja?
Pari

Jawaban:

8

Ada beberapa kait di drupal 7 untuk membatasi akses ke file.

Satu hal yang harus Anda sadari adalah bahwa kait akses ini hanya akan berfungsi jika metode unduhan Anda bersifat pribadi, dan file-file tersebut berada di jalur pribadi Anda.

Seperti yang Anda sebutkan dalam pertanyaan Anda, ada hook_file_download yang dapat digunakan dalam kasus Anda (dengan asumsi file tersebut bersifat pribadi). Ini tidak akan berfungsi jika file, yang ditautkan oleh seseorang, ada di tempat umum seperti situs / default / file / abc123.txt.

Jika Anda mengunggah file-file pribadi ini dalam suatu bidang, maka hook_file_download_access akan tampak lebih tepat. Ini akan memberi Anda bidang tempat file tersebut dimiliki dan juga entitas terkait tempat bidang ini digunakan sehingga Anda harus dapat melakukan logika yang lebih rumit seperti memanggil fungsi akses yang sesuai untuk memeriksa apakah pengguna memiliki akses ke bidang alih-alih memiliki daftar kode dalam kode.

ericduran
sumber
hook_file_download dengan sistem file pribadi tidak meminta pengguna anonim. Ada yang tahu kenapa?
Jeet
1
Saya pikir karena pengguna anonim tidak seharusnya mengakses file pribadi.
DrCord
0

Tautan ke file hanya itu - tautan. Saya tidak percaya ada cara untuk menentukan lokasi tautan. Anda mungkin dapat melihat header, tetapi ini mungkin tidak akan berhasil.

Jika Anda dapat menentukan lokasi tautan ke file, menggunakan hook_file_download akan menjadi pilihan yang baik untuk kontrol akses.

googletorp
sumber