Проверка доступа + кешируемость
Les vérificateurs d'accès aux routes, hook_entity_access() et tout ce qui est nécessaire pour retourner un objet AccessResultInterface doivent ajouter les métadonnées de mise en cache appropriées.
Si vous ne les avez pas encore lus, consultez les cache tags, cache contexts et max-age.
Paramètres de vérification d'accès
Le mécanisme de vérification d'accès recevra différents paramètres - au minimum, le compte utilisateur (AccountInterface) et souvent un objet. Il prendra alors une décision basée sur les propriétés de ces paramètres.
Une dépendance mise en cache au $parameter doit être ajoutée si la modification d'au moins une propriété de ce paramètre modifie le résultat d'accès.
Par exemple :
$access_result = AccessResult::allowedIf($node->isPublished()) // Le résultat d'accès dépend d'une propriété de l'objet qui peut changer : c'est une dépendance mise en cache. ->addCacheableDependency($node);
Un autre cas fréquent est lorsque le résultat d'accès dépend d'une propriété qui ne peut pas être modifiée (généralement un identifiant, UUID). Par exemple, autoriser l'accès si ce compte utilisateur est le propriétaire de l'objet :
$access_result = AccessResult::allowedIf($node->getOwnerId() === $account->id()) // Le résultat d'accès dépend du propriétaire du nœud, et le propriétaire peut changer. ->addCacheableDependency($node); // Le résultat d'accès dépend également d'un compte utilisateur, et l'ID du compte utilisateur ne peut jamais changer. Par conséquent, il n'est pas nécessaire d'ajouter $account comme dépendance mise en cache. // Mais, si $account est l'utilisateur courant, et non un utilisateur codé en dur, il faut aussi s'assurer que la mise en cache varie selon l'utilisateur courant, pour ne pas exécuter cette vérification d'accès une seule fois puis réutiliser son résultat pour tous les utilisateurs. if ($account->id() === \Drupal::currentUser()->id()) { $access_result->cachePerUser(); }