Am o problemă cu entitatea paragraphs_type, când adaug un paragraphs_type într-un nod, cu elemente de paragraf înăuntru și îi setez starea de nepublicare, utilizatorii anonimi îl pot vedea în continuare.
Încerc să personalizez accesul prin moduri diferite:
/**
* Implementează hook_ENTITY_TYPE_access().
* ENTITY_TYPE: paragraphs_type
*/
funcția my_module_paragraphs_type_access(
Drupal\Core\Entity\EntityInterface $entity,
$operatie,
\Drupal\Core\Session\AccountInterface $cont
) {
ecou '<pre>';
var_dump('my_module_paragraphs_type_access');
var_dump($operatie);
var_dump($cont);
Ieșire();
//Ascunde paragraful pentru utilizatorii anonimi dacă nu este publicat
if ($operation == 'vizualizare'
&& !$entity->isPublished()
&& ($cont->isAnonymous() ||
!$account->hasPermission('vezi paragrafele nepublicate'))
) {
returnează \Drupal\Core\Access\AccessResult::forbidden();
}
returnează \Drupal\Core\Access\AccessResult::allowed();
}
Nu e treaba, var_dump('my_module_paragraphs_type_access');
nu se execută niciodată
Sau o clasă personalizată care extinde ParagraphsTypeAccessControlHandler :
<?php
utilizați Drupal\Core\Access\AccessResult;
utilizați Drupal\Core\Entity\EntityInterface;
utilizați Drupal\Core\Session\AccountInterface;
utilizați Drupal\paragraphs\ParagraphsTypeAccessControlHandler;
/*
* Adăugați acces personalizat paragraphs_type
*/
clasa CustomParagraphsTypeAccessControlHandler extinde ParagraphsTypeAccessControlHandler {
/**
* {@inheritdoc}
*/
funcția protejată checkAccess(EntityInterface $entity, $operation, AccountInterface $cont) {
comutator ($operare) {
cazul „vezi paragrafe nepublicate”:
if($cont->este anonim())
returnează AccessResult::interzis();
pauză;
caz „vezi eticheta”:
return AccessResult::allowedIfHasPermission($cont, „acces conținut”);
Mod implicit:
return parent::checkAccess($entity, $operation, $cont);
}
}
}
dar tot la fel...
Un alt plan de a le ascunde utilizatorilor anonimi?
Am gasit o problema asta:https://www.drupal.org/project/paragraphs/issues/3095959#comment-13363535