Zugriffsprüfung + Cachefähigkeit
Zugriffsprüfer für Routen, hook_entity_access()
und alle anderen, die ein Objekt vom Typ AccessResultInterface
zurückgeben, müssen die entsprechenden Cache-Metadaten hinzufügen.
Wenn Sie es noch nicht getan haben, lesen Sie bitte über Cache-Tags, Cache-Kontexte und Max-Age.
Zugriffsprüfungsparameter
Das Zugriffsprüfwerkzeug erhält verschiedene Parameter – mindestens das Benutzerkonto (AccountInterface
) und häufig ein Objekt. Anschließend trifft es eine Entscheidung basierend auf den Eigenschaften dieser Parameter.
Eine cachebare Abhängigkeit von $parameter
muss hinzugefügt werden, wenn eine Änderung mindestens einer Eigenschaft dieses Parameters das Zugriffsresultat beeinflusst.
Zum Beispiel:
$access_result = AccessResult::allowedIf($node->isPublished()) // Das Zugriffsresultat hängt von einer Eigenschaft des Objekts ab, die sich ändern kann: es ist eine cachebare Abhängigkeit. ->addCacheableDependency($node);
Ein weiterer häufiger Fall ist, wenn das Zugriffsresultat von einer Eigenschaft abhängt, die sich nicht ändern kann (normalerweise eine ID, UUID). Beispiel: Zugriff erlauben, wenn das Benutzerkonto Eigentümer des Objekts ist:
$access_result = AccessResult::allowedIf($node->getOwnerId() === $account->id()) // Das Zugriffsresultat hängt vom Besitzer des Nodes ab, der Besitzer kann sich ändern. ->addCacheableDependency($node); // Das Zugriffsresultat hängt auch vom Benutzerkonto ab, dessen ID sich niemals ändert. Daher müssen wir $account nicht als cachebare Abhängigkeit hinzufügen. // Wenn $account jedoch der aktuelle Benutzer ist und nicht ein fest kodierter Benutzer, müssen wir außerdem sicherstellen, dass dieser Cache pro Benutzer variiert wird, damit wir diese Zugriffsprüfung nicht nur einmal ausführen und das Ergebnis für alle Benutzer wiederverwenden. if ($account->id() === \Drupal::currentUser()->id()) { $access_result->cachePerUser(); }
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.