Ví dụ về hook_file_d Download


8

Làm cách nào để hạn chế quyền truy cập vào một số tệp nhất định dựa trên loại nội dung của chúng? Tôi có phần tải xuống cho người dùng đã đăng ký và tôi muốn ngăn họ đăng liên kết ở đâu đó bên ngoài trang web của tôi.

Thực hiện đã hook_file_download()đủ chưa?

Tôi đã thử mã này và nó đủ cho mục đích của tôi, nhưng tài liệu hook_file_download()không giúp được gì nhiều.

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

Có lẽ tôi đăng ví dụ và tôi hy vọng nó giúp trực quan hóa nó Tôi có tệp content_type với tệp trường (đặt phương thức tải xuống riêng tư) sau đó tôi cần bảo vệ tệp này khỏi việc truy cập vào người không được ủy quyền (dựa trên vai trò người dùng)? Aproach tốt nhất là gì? Đơn giản chỉ cần kiểm tra xem người dùng có vai trò đúng trong hook_file_doad và đó là tất cả?
Pari

Câu trả lời:


8

Có một vài hook trong drupal 7 để hạn chế quyền truy cập vào các tập tin.

Một điều bạn phải nhận ra là các hook truy cập này sẽ chỉ hoạt động nếu phương thức tải xuống của bạn là riêng tư và các tệp nằm trong đường dẫn riêng của bạn.

Như bạn đã đề cập trong câu hỏi của mình, có một hook_file_doad sẽ hoạt động trong trường hợp của bạn (giả sử tệp là riêng tư). Điều này sẽ không hoạt động nếu tệp, ai đó đang liên kết đến, ở đâu đó công khai, chẳng hạn như các trang web / default / files / abc123.txt.

Nếu bạn tình cờ tải lên các tệp riêng tư này trong một trường, thì hook_file_doad_access có vẻ phù hợp hơn. Điều này sẽ cung cấp cho bạn trường mà tệp thuộc về và cũng là thực thể có liên quan mà trường này đang được sử dụng để bạn có thể thực hiện logic phức tạp hơn như gọi hàm truy cập phù hợp để kiểm tra xem người dùng có quyền truy cập vào trường thay vì có một danh sách mã hóa cứng trong mã.


hook_file_doad với hệ thống tệp riêng không gọi cho người dùng ẩn danh. Bất cứ ý tưởng tại sao?
Jeet

1
Tôi nghĩ bởi vì người dùng ẩn danh không được phép truy cập các tệp riêng tư.
DrCord

0

Một liên kết đến một tập tin chỉ là vậy - một liên kết. Tôi không tin có một cách để xác định vị trí của liên kết. Bạn có thể nhìn vào các tiêu đề, nhưng điều này có thể sẽ không hoạt động.

Nếu bạn có thể xác định vị trí của liên kết đến tệp, sử dụng hook_file_doad sẽ là một lựa chọn tốt để kiểm soát truy cập.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.