Score:4

จะป้องกันไม่ให้โหนดถูกลบขณะดำเนินการลบได้อย่างไร

ธง cn

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

ฉันพบ hook_entity_predelete()ซึ่งสมบูรณ์แบบ มันทำงานก่อนที่จะลบโหนด แต่ฉันไม่รู้ว่าจะหยุดการดำเนินการลบอย่างไร ฉันต้องการทำบางสิ่งในเบ็ดนั้นและป้องกันการลบโหนด

ฉันเห็นปัญหานี้ด้วย: ฉันจะป้องกันไม่ให้โหนดถูกลบได้อย่างไร กับ hook_node_access()แต่มันใช้งานไม่ได้ตามที่ฉันต้องการ

hook_entity_delete() ก็ไม่เป็นไรเพราะ ตะขอนี้ทำงานเมื่อเอนทิตีถูกลบออกจากที่เก็บข้อมูล. ฉันจำเป็นต้องป้องกันมัน

ขอบคุณสำหรับความช่วยเหลือของคุณ.

Kevin avatar
in flag
คำตอบที่ง่ายที่สุดคือการลบการอนุญาตออกจากบทบาท "ลบใดๆ" หรือ "ลบของตัวเอง" ตามประเภทเนื้อหาที่กำหนด สิ่งนี้ควรลบปุ่มในส่วนต่อประสานผู้ใช้ Hooks จะไม่ช่วยในกรณีนี้เพราะมันมีไว้สำหรับการทำงานก่อนการดำเนินการไม่ใช่การหยุด - มันจะดำเนินการต่อไป สิ่งนี้มีอยู่ใน EntityBase::delete เป็นหลัก มิฉะนั้น คำตอบของ Clive และ Berdirs ในคำถามที่เชื่อมโยงก็เพียงพอแล้ว
sailormoon avatar
cn flag
ขอบคุณสำหรับความคิดเห็น ฉันพบวิธีแก้ปัญหาอื่นแล้ว (ฉันเพิ่มไว้ด้านล่างเป็นคำตอบ)
Score:1
ธง cn

ฉันพบวิธีแก้ปัญหาที่ทำให้ฉันพอใจ: ฉันใช้ hook_form_alter(). เมื่อคุณพยายามลบโหนดเสมอ จะมีแบบฟอร์มยืนยันพร้อมปุ่ม "ลบ" และ "ยกเลิก" ฉันกำลังแก้ไขแบบฟอร์มนั้น - ในบางกรณี (ซึ่งขึ้นอยู่กับการอนุญาตของผู้ใช้) ฉันกำลังยกเลิกการตั้งค่าปุ่ม "ลบ" (ด้วย unset($form['actions']['submit']ดังนั้นจึงไม่สามารถลบได้) และเพิ่มปุ่มของฉันเองแทนด้วยฟังก์ชันการโทรกลับ ฉันกำลังเปลี่ยนชื่อของแบบฟอร์มและคำอธิบายนั้นด้วย

leymannx avatar
ne flag
อาจเป็นประโยชน์สำหรับผู้อ่านในอนาคตในการดูรหัสเล็กน้อย

โพสต์คำตอบ

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