Score:0

วิธีการเข้าถึงที่กำหนดเองสำหรับย่อหน้าของเอนทิตี_type

ธง cz

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

/**
 * ใช้ hook_ENTITY_TYPE_access()
 * ENTITY_TYPE : ย่อหน้า_ประเภท
 */
ฟังก์ชัน my_module_paragraphs_type_access(
  Drupal\Core\Entity\EntityInterface $entity,
  $ การดำเนินการ,
  \Drupal\Core\Session\AccountInterface $บัญชี
) {
  echo '<ก่อน>';
  var_dump('my_module_paragraphs_type_access');
  var_dump(การดำเนินการ $);
  var_dump(บัญชี$);
  ทางออก ();
  // ซ่อนย่อหน้าสำหรับผู้ใช้ที่ไม่ระบุชื่อหากไม่ได้เผยแพร่
    ถ้า ($operation == 'ดู'
        && !$entity->isPublished()
        && ($account->isAnonymous() ||
        !$account->hasPermission('ดูย่อหน้าที่ไม่ได้เผยแพร่'))
      ) {
    กลับ \Drupal\Core\Access\AccessResult::forbidden();
  }

  กลับ \Drupal\Core\Access\AccessResult::allowed();
}

มันไม่เวิร์ค var_dump('my_module_paragraphs_type_access'); มันไม่เคยดำเนินการ

หรือคลาสแบบกำหนดเองที่ขยาย ParagraphsTypeAccessControlHandler :

<?php

ใช้ Drupal\Core\Access\AccessResult;
ใช้ Drupal\Core\Entity\EntityInterface;
ใช้ Drupal\Core\Session\AccountInterface;
ใช้ Drupal\paragraphs\ParagraphsTypeAccessControlHandler;

/*
 * เพิ่มการเข้าถึง paragraphs_type ที่กำหนดเอง
 */
คลาส CustomParagraphsTypeAccessControlHandler ขยาย ParagraphsTypeAccessControlHandler {
  
  /**
   * {@inheritdoc}
   */
  ฟังก์ชันที่มีการป้องกัน checkAccess (EntityInterface $entity, $operation, AccountInterface $account) {
    สวิตช์ (การดำเนินการ $) {
      กรณี 'ดูย่อหน้าที่ไม่ได้เผยแพร่':
        ถ้า($account->isAnonymous())
          กลับ AccessResult::forbidden();
        หยุดพัก;
      กรณี 'ดูฉลาก':
        ส่งคืน AccessResult::allowedIfHasPermission($account, 'เข้าถึงเนื้อหา');
      ค่าเริ่มต้น:
        ส่งคืน parent::checkAccess($entity, $operation, $account);
    }
  }
}

แต่ก็ยังเหมือนเดิม... แผนอื่นที่จะซ่อนพวกเขาไปยังผู้ใช้ที่ไม่ระบุตัวตน ?

ฉันพบปัญหานี้:https://www.drupal.org/project/paragraphs/issues/3095959#comment-13363535

Chris4783 avatar
gb flag
สิทธิ์ "ดูย่อหน้าที่ไม่ได้เผยแพร่" สำหรับผู้ใช้ที่ไม่ระบุชื่อถูกยกเลิกการเลือกหรือไม่ ตะขอ "hook_ENTITY_TYPE_access" ต้องชื่อ "my_module_paragraph_access" คุณได้แก้ไขประเภทเอนทิตีสำหรับ AccessControllHandler ด้วย hook "my_module_entity_type_alter" แล้วหรือยัง
florian_drupal avatar
cz flag
ใช่ สิทธิ์ "ดูย่อหน้าที่ไม่ได้เผยแพร่" ไม่ถูกทำเครื่องหมาย ฉันสับสนกับเอนทิตีประเภท `ย่อหน้า' และ `ย่อหน้า_ประเภท' ซึ่งไม่ใช่เอนทิตีเดียวกัน ในการส่ง AccessControllHandler ใหม่ของฉัน ฉันใช้ `hook_entity_type_build` กับ: `$entity_types['paragraphs_type']->setHandlerClass('access', 'Drupal\my_module\Access\CustomParagraphsTypeAccessControlHandler');`
Chris4783 avatar
gb flag
ประเภทเอนทิตีของ paragraphs_types คือบันเดิลของย่อหน้า เช่น WYSIWYG ประเภทย่อหน้าคือย่อหน้าของกลุ่มเฉพาะ เช่น WYSIWYG ดังนั้น คุณต้องเปลี่ยนการเข้าถึงย่อหน้า ไม่ใช่เปลี่ยนย่อหน้า_type ใช้ hook `hook_entity_type_alter` เพื่อแก้ไข Access Control Handler ที่ลงทะเบียนไว้ `hook_entity_type_build` เพียงเพิ่มข้อมูลเพิ่มเติมและไม่ได้แก้ไข จากนั้นใช้ `$entity_types['paragraph']->setAccessClass` ฉันลองสถานการณ์ของคุณด้วยการติดตั้งใหม่และไม่ต้องปรับอะไรเลย แม้ว่าฉันจะเปิดใช้งานโมดูล Paragraphs Type Permissions ก็ตาม
florian_drupal avatar
cz flag
ขอบคุณสำหรับการตอบกลับ ในกรณีของฉันฉันไม่ได้เปิดใช้งานโมดูลประเภทย่อหน้า ฉันจะลองวิธีแก้ปัญหาของคุณด้วย ``hook_entity_type_alter`` ฉันไม่เข้าใจการพึ่งพาเอนทิตี ตอนนี้ชัดเจนมากขึ้น
florian_drupal avatar
cz flag
ฉันลองบางอย่าง: ``function my_module_paragraph_alter(array &$entity_types) { /** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */ เสียงสะท้อน '
Chris4783 avatar
gb flag
ฟังก์ชันของคุณจะต้องเรียกว่า `my_module_entity_type_alter` ไม่ใช่ `my_module_paragraph_alter`
florian_drupal avatar
cz flag
ขอบคุณ ฉันไม่เห็นข้อผิดพลาดของฉัน ฉันจะแก้ไข แต่ฉันมีข้อผิดพลาด: ``` ประเภทเอนทิตี "ย่อหน้า" ไม่ได้ระบุตัวจัดการการเข้าถึง ใน Drupal\Core\Entity\EntityTypeManager->getHandler()```
Chris4783 avatar
gb flag
ดูเหมือนว่าคุณมีปัญหากับชื่อไฟล์หรือเนมสเปซ ตรวจสอบให้แน่ใจว่าคุณใช้เนมสเปซของไฟล์ ใส่ไฟล์ในโฟลเดอร์ที่ถูกต้อง และตั้งชื่อไฟล์อย่างถูกต้องลิงก์นี้อาจช่วยคุณได้ ตัวจัดการการเข้าถึง-drupal)
florian_drupal avatar
cz flag
ฉันพบปัญหา: มันแสดงผลแบบกำหนดเองด้วย hook_preprocess_node โดยไม่ตรวจสอบการเข้าถึงเมื่อย่อหน้าแสดงผลด้วย ``\Drupal::entityTypeManager()->getViewBuilder('paragraph')->view($paragraph, 'paragraph_type'); ``
Score:0
ธง cz

ฉันพบปัญหา ย่อหน้านี้แสดงผลโดยทางโปรแกรมด้วย hook_preprocess_node ฉันแก้ไขด้วยการตรวจสอบการเข้าถึงเช่นนั้น:

ฟังก์ชัน mymodule_preprocess_node__my_node(&$ตัวแปร) {

  $node = $variables['โหนด'];

  $paragraphs = $node->get('field_para_blocks');

  /** @var \Drupal\paragraphs\Entity\Paragraph $วรรค */
  foreach ($paragraphs->referencedEntities() เป็น $paragraph) {

    $bundle = $วรรค->มัด();

    ถ้า ($ ย่อหน้า -> เข้าถึง ('ดู')) {
      $bundle = $วรรค->มัด();
      $variables[$bundle] = \Drupal::entityTypeManager()
        ->getViewBuilder('ย่อหน้า')
        ->ดู($วรรค, 'my_paragraph_type');
    }
  }

โพสต์คำตอบ

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