Score:1

View only your own comments, no one else's?

ธง cn

I have a client who would like users to be able to comment on content without being able to see any other users' comments. This is for a review system where users shouldn't feel influenced by the views of other users. I'm using Drupal 9.3.14 and a subtheme of Radix.

I have tried adding this to my theme's comment.html.twig:

{% if author_id == user.id %}
    {{ content }}
{% endif %}

That works for a while, but after a while, users report that they can see some other users' comments, but not all of them.

How can I make sure that users can always see only their own comments and no one else's?

leymannx avatar
ne flag
เนื่องจากคุณไม่ได้ใช้การแคชตามผู้ใช้ในเนื้อหานั้น
sjhuskey avatar
cn flag
ขอบคุณ @leymannx ฉันกำลังมองหาการใช้การแคชตามผู้ใช้ แต่ฉันไม่สามารถหาคำแนะนำหรือตัวอย่างที่เป็นประโยชน์สำหรับการดำเนินการดังกล่าว ตัวชี้ใด ๆ มีเบ็ดที่ฉันสามารถนำไปใช้เพื่อจัดการกับการแคชความคิดเห็นได้หรือไม่?
Score:1
ธง ne

หา hook_ENTITY_TYPE_access/hook_comment_access ไม่ทำงานเมื่อพยายามส่งคืน AccessResult::forbidden()->cachePerUser() หลังจากเปรียบเทียบ ID เจ้าของความคิดเห็นกับ ID ผู้ใช้ปัจจุบัน (อาจเกี่ยวข้องกับ: #2879087) คุณช่วยลองใช้ตรรกะการประมวลผลล่วงหน้าต่อไปนี้ได้ไหม เนื่องจากขณะนี้ฉันไม่มีโครงการที่จะตรวจสอบสิ่งนี้อย่างถูกต้อง ฉันไม่แน่ใจว่ามันใช้งานได้หรือไม่และถ้า #ข้อความธรรมดา สามารถใช้ (mis-) เป็นสวิตช์ป้องกันแคชในเทมเพลตได้เลย

/**
 * ใช้ hook_preprocess_HOOK()
 */
ฟังก์ชัน MYMODULE_preprocess_comment(&$ตัวแปร) {
  $variables['own_comment'] = [
    '#plain_text' => 'ไม่',
    '#แคช' => [
      'บริบท' => ['ผู้ใช้'],
    ]
  ];
  /** @var \Drupal\comment\Entity\Comment $comment */
  $comment = $variables['elements']['#comment'];
  ถ้า ($comment->getOwner()->id() === \Drupal::currentUser()->id()) {
    $variables['own_comment']['#plain_text'] = 'ใช่';
  }
}
{% ถ้า own_comment['#plain_text'] == 'ใช่' %}
  {{ เนื้อหา }}
{% อื่น %}
  {{ 'ไม่ใช่ความคิดเห็นของคุณ'|t }}
{% เอนดิฟ %}

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

sjhuskey avatar
cn flag
ว้าว! ขอบคุณสำหรับความพยายามอย่างมาก @leymannx! ขออภัย ดูเหมือนว่าตัวแปร "own_comment" ไม่ได้ถูกตั้งค่า ดังนั้นตรรกะ twig ที่คุณรวมไว้จะไปเป็น "ไม่ใช่ความคิดเห็นของคุณ" เสมอ ฉันคิดว่าคุณอาจคิดถูกที่ต้องใช้ตัวจัดรูปแบบฟิลด์ความคิดเห็นของฉันเอง ฉันจะดูโมดูลที่คุณเชื่อมโยงและดูว่าฉันสามารถทำอะไรได้บ้าง
4uk4 avatar
cn flag
ข้อมูลเมตาที่แนบกับองค์ประกอบการเรนเดอร์จะแสดงขึ้นเมื่อมีการเรนเดอร์เท่านั้น หากคุณไม่มีอะไรจะเรนเดอร์ มีทางเลือกอื่น ตะขอประมวลผลล่วงหน้ามีคุณสมบัติที่ซ่อนอยู่ซึ่งคุณสามารถเพิ่มข้อมูลเมตาแคชไปที่ระดับบนสุด: `$variables['#cache']['contexts'][] = 'user';` เลเยอร์ชุดรูปแบบทำให้เกิดฟองขึ้น โดยไม่ขึ้นกับเนื้อหาที่แสดงผลอื่นๆ
Score:0
ธง us

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

หากคุณติดตั้ง drupal/console คุณสามารถเรียกใช้บรรทัดคำสั่งเช่น drupal สร้าง:โมดูล เพื่อตัดโมดูลเริ่มต้นออก drupal สร้าง: สิทธิ์ เพื่อเพิ่มสิทธิ์ในโมดูลนั้น วิธีที่รวดเร็วในการตัดทอนโมดูลที่กำหนดเองแล้วใส่ตรรกะ php ที่คล้ายกันที่คุณมีอยู่แล้วในหัวของคุณ แต่เพียงแค่เพิ่มลงใน drupal ด้วยวิธีอื่น

โพสต์คำตอบ

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