Score:0

การเข้าถึงถูกปฏิเสธสำหรับไฟล์ที่เพิ่มโดยทางโปรแกรมไปยังโหนด

ธง in

ฉันมีสคริปต์แบบกำหนดเองที่นำเข้าเนื้อหาจากฐานข้อมูลภายนอก ฉันกำลังแนบไฟล์โดยใช้รหัสที่กำหนดเองด้านล่าง

$file = ไฟล์::สร้าง([
  'ชื่อไฟล์' => $new_filename,
  'uri' => $folder_uri '/' . $new_filename,// ส่วนตัว://my_content_type/<subdir>/filename.pdf
]);
$file->setPermanent();
$file->save();

เมื่อส่วนด้านบนเสร็จสมบูรณ์ ให้แนบไฟล์นั้นกับโหนดใหม่โดยใช้โค้ดที่กำหนดเองด้านล่าง

$storage_handler = \Drupal::entityTypeManager()->getStorage("โหนด");
$ข้อมูล = [
    'type' => 'my_content_type',
    'title' => 'ชื่อเรื่อง',
    'สถานะ' => 1,
    ...
    'field_attach' => ['target_id' => $file->fid->value],
    ...
  ];
$node = $storage_handler->create($data);
$node->save();

เมื่อฉันแก้ไขโหนดเดียวกัน ฉันเห็นไฟล์ที่ถูกต้องแนบมา แต่ในขณะที่เปิดในการแสดงตัวอย่าง ฉันได้รับ "Access Denied" แม้ว่าฉันจะเข้าสู่ระบบในฐานะผู้ดูแลระบบก็ตาม

แม้ว่าสนาม field_attach เป็นหลายไฟล์ และถ้าฉันแนบไฟล์อื่นด้วยตนเองจากหน้าแก้ไขและบันทึก ฉันจะสามารถดูตัวอย่างได้อย่างถูกต้อง

แก้ปัญหา:

นี่คือส่วน devel สำหรับโหนด:

[field_attach] => อาร์เรย์
(
    [x-default] => อาร์เรย์
    (
        [0] => อาร์เรย์
        (
            [target_id] => 1876 // ดูตัวอย่างไม่ได้ การเข้าถึงถูกปฏิเสธ
            [จอแสดงผล] => 1
            [รายละเอียด] => 
        )
        [1] => อาร์เรย์
        (
            [target_id] => 1878 // สามารถดูตัวอย่างได้
            [จอแสดงผล] => 1
            [รายละเอียด] => 
        )
    )
)

ในฐานข้อมูลแต่ละไฟล์มีค่าเหมือนกัน:

# เลือก * จาก file_usage โดยที่ fid in(1876, 1878)\G
*************************** 1. แถว ******************** *******
   รหัส: 1876
โมดูล: ไฟล์
  ชนิด: โหนด
    รหัส: 92
 นับ: 1
*************************** 2. แถว ******************** *******
   รหัส: 1878
โมดูล: ไฟล์
  ชนิด: โหนด
    รหัส: 92
 นับ: 1
2 แถวในชุด (0.000 วินาที)


# เลือก * จาก file_managed โดยที่ fid in(1876, 1878)\G
*************************** 1. แถว ******************** *******
     รหัส: 1876
    รหัส: 876c1bd1-566c-4d6b-a767-4925d75b593f
รหัสภาษา: it
     ไอดี: 1
ชื่อไฟล์: first_file.pdf
     ยูริ: ส่วนตัว://my_content_type/201211/first_file.pdf
filemime: ใบสมัคร/pdf
ขนาดไฟล์: 140982
  สถานะ: 1
 สร้าง: 1651744379
 เปลี่ยนแล้ว: 1651744379
*************************** 2. แถว ******************** *******
     รหัส: 1878
    รหัส: 4c26c169-3e92-4254-af49-e5b203caf4c6
รหัสภาษา: it
     ไอดี: 1
ชื่อไฟล์: second_file.pdf
     ยูริ: ส่วนตัว://my_content_type/202205/first_file.pdf
filemime: ใบสมัคร/pdf
ขนาดไฟล์: 140982
  สถานะ: 1
 สร้าง: 1651745721
 เปลี่ยนแล้ว: 1651745725
2 แถวในชุด (0.000 วินาที)

สิทธิ์จะเหมือนกันสำหรับไดเร็กทอรีและไฟล์ สิ่งที่แตกต่างจากการแนบด้วยตนเองและการแนบโดยทางโปรแกรม หายไปเพื่อตั้งค่าบางอย่าง?

ขอบคุณล่วงหน้า.

Score:1
ธง in

ที่เพจ /admin/reports/การเข้าถึงถูกปฏิเสธ สามารถพบได้เมื่อการเข้าถึงถูกปฏิเสธ เมื่อเปรียบเทียบกับสถานการณ์การทำงาน ฉันพบว่าจำเป็นต้องเพิ่มบรรทัดใน file_usage ตาราง. นี่คือรหัสบรรทัดที่จำเป็นในการวางหลังจากบันทึกโหนดแล้ว:

\Drupal::service('file.usage')->add($file, 'file', 'node', $node->id());

ที่บริการเป็นตัวอย่างของ Drupal\file\FileUsage\DatabaseFileUsageBackend ระดับ.

Score:0
ธง us

รหัสของคุณดูดีสำหรับฉัน อย่างไรก็ตาม ไม่แน่ใจว่าคุณต้องการอนุญาตไฟล์แบบใด คุณลองส่งรหัสผู้ใช้เพื่อดูว่าคุณสามารถดูไฟล์ที่อัปโหลดได้หรือไม่

  $file = ไฟล์::สร้าง([
      'ชื่อไฟล์' => $new_filename,
      'uri' => $folder_uri '/' . $new_filename,
      'uid' => 1,
    ]);

เป็นเพียงคำแนะนำ การส่งรหัสไฟล์โดยใช้ฟังก์ชัน id() จะเป็นการดี

 'target_id' => $file->id(),
in flag
ขอบคุณสำหรับการตอบกลับของคุณและสำหรับการแก้ไขภาษาอังกฤษของฉันด้วย :) ฉันลองใช้คำแนะนำของคุณแล้ว แต่สถานการณ์ไม่เปลี่ยนแปลง ฉันดีบั๊กด้วยบันทึกที่แสดงที่หน้า `admin/reports/access-denied` และฉันพบสาเหตุของข้อผิดพลาด ผมขอเสนอเป็นคำตอบ ขอบใจ.
Pushpinder Rana avatar
us flag
ดีใจที่คุณพบวิธีแก้ปัญหา ขอบคุณที่แบ่งปันคำตอบ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา