Điểm:1

Kiểm soát truy cập dựa trên khóa cho các tệp riêng tư

lá cờ jp

Tôi đang xây dựng trang web cung cấp nội dung video trả phí để nhúng vào trang web của chính khách hàng. Tôi đang kiểm soát thành công quyền truy cập vào các nút chứa nội dung video dựa trên vai trò người dùng có thể mua được.

Bây giờ tôi cần cung cấp cho người dùng một mã nhúng mà lý tưởng nhất là chỉ hoạt động từ miền của họ.Hiện tại, tôi rất vui khi có thể giới hạn nó cho những người dùng cụ thể.

Tôi đã cài đặt các mô-đun key_auth và restui, đồng thời tôi đã bật tài nguyên REST của 'tệp'. Bây giờ tôi có thể truy cập thông tin *về* tệp với tư cách là người dùng ẩn danh bằng khóa api của người đăng ký trả phí trong truy vấn. Tuy nhiên tôi không thể truy cập tệp thực tế.

Thông tin tôi nhận được dưới đây.

{"fid":[{"value":3}],"uuid":[{"value":"5655ecda-b421-4ab8-aa92-d43c6c0fbfdf"}],"langcode":[{"value":" vi"}],"uid":[{"target_id":1,"target_type":"user","target_uuid":"58d862eb-86e9-4ec6-bb33-89bda5c1767a","url":"\/user\ /1"}],"filename":[{"value":"file_example_MP4_480_1_5MG.mp4"}],"uri":[{"value":"private:\/\/2022-04\/file_example_MP4_480_1_5MG.mp4" "url":"\/system\/files\/2022-04\/file_example_MP4_480_1_5MG.mp4"}],"filemime":[{"value":"video\/mp4"}],"filesize":[ {"value":1570024}],"status":[{"value":true}],"created":[{"value":"2022-04-16T15:52:39+00:00"," format":"Y-m-d\TH:i:sP"}],"changed":[{"value":"2022-04-16T15:52:43+00:00","format":"Y-m-d\ TH:i:sP"}]}

Làm cách nào tôi có thể truy cập vào video thực tế theo cách này?

apaderno avatar
lá cờ us
Tôi hiểu điều đó bằng cách *lấy quyền truy cập vào video thực tế* ý bạn là lấy URL của video. Vì bạn đang sử dụng API REST, nên tôi cũng nhận yêu cầu không đến từ trang Drupal. Đường dẫn tương đối của video được cung cấp trong `uri.url`. Để làm được điều đó, bạn cần thêm URL của trang web. Ví dụ: nếu đó là `http://example.com/drupal`, thì URL video đó sẽ là `http://example.com/drupal/system/files/2022-04/file_example_MP4_480_1_5MG.mp4`. Vì mã đang tạo một yêu cầu REST nên nó biết URL mà yêu cầu được gửi đến, điều đó cũng có nghĩa là nó có thể lấy phần còn thiếu trong đường dẫn video để biến nó thành một URL hoàn chỉnh.
apaderno avatar
lá cờ us
Hay bạn đang hỏi *Về phía Drupal, làm cách nào để thay đổi các giá trị được trả về từ API REST để bao gồm URL video tuyệt đối?*
apaderno avatar
lá cờ us
Ngoài ra, *nhận quyền truy cập vào video thực tế* chỉ có nghĩa là việc truy cập video bằng URL của nó từ bên ngoài Drupal sẽ trả về lỗi 403 và bạn muốn biết cách tránh điều đó. Vì video được lưu dưới dạng tệp riêng tư nên phía Drupal, quyền truy cập vào các tệp đó được kiểm soát bởi [`hook_file_download()`](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core% 21File%21file.api.php/function/hook_file_download/9.3.x). Trong trường hợp này, cách triển khai hook đó sẽ hiểu tệp được yêu cầu bởi *client* sử dụng API REST để truy cập thông tin là câu hỏi "thực".
Alfred Armstrong avatar
lá cờ cn
Nếu video sẽ được nhúng trên trang web của khách hàng, thì bất kỳ ai xem video đó nhất thiết phải có quyền truy cập.Bạn có thể ngăn không cho video được nhúng vào các trang web trái phép vì hầu hết các trình duyệt sẽ tôn trọng các tiêu đề chính sách bảo mật nội dung, nhưng nếu video đang được cung cấp dưới dạng tệp thì bạn không thể ngăn video được sao chép và sau đó được cung cấp trên các nền tảng khác.
griz avatar
lá cờ jp
@AlfredArmstrong Vâng, đã trải qua thời gian dài được mô tả trong câu trả lời của tôi, điều này đã trở nên rõ ràng. Vì lý do này, tôi hiện đang xem xét việc sử dụng nền tảng lưu trữ video cung cấp khả năng bảo vệ chống lại điều này, nhưng đó là một hành trình thú vị.
griz avatar
lá cờ jp
@apaderno Cảm ơn vì những nỗ lực của bạn. Điều tôi đang cố làm là tạo một điểm cuối còn lại chỉ trả về tệp. Điều đó sẽ dẫn đến việc tải xuống nếu yêu cầu GET được thực hiện thông qua trình duyệt hoặc trong tệp được hiển thị trong một trang nếu được sử dụng trong thuộc tính src.
Điểm:0
lá cờ jp

Tôi đã phải viết một mô-đun tùy chỉnh với cấu trúc sau: video_resource.info.yml src/Plugin/Deriver/VideoDeriver.php src/Plugin/rest/resource/VideoResource.php

Phần tài nguyên còn lại và trình dẫn xuất thực thể là các bản sao rút gọn của EntityResource và EntityDeriver:

\Drupal\rest\Plugin\rest\resource\EntityResource \Drupal\rest\Plugin\Deriver\EntityDeriver

Các lớp này cùng nhau tạo ra một nguồn tài nguyên còn lại cho mọi loại thực thể. Tôi đặt của mình chỉ tạo tài nguyên còn lại cho loại thực thể 'Tệp', với mã sau trong hàm get() của nó:

$filepath = $entity->getFileUri(); $response = new BinaryFileResponse($filepath); trả lại phản hồi $;

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.