core/lib/Drupal/Core/Entity/Entity/EntityViewDisplay.php | 13 +++++++++++-- core/lib/Drupal/Core/Entity/EntityViewBuilder.php | 1 - 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/core/lib/Drupal/Core/Entity/Entity/EntityViewDisplay.php b/core/lib/Drupal/Core/Entity/Entity/EntityViewDisplay.php index 1d62a54..ab898c1 100644 --- a/core/lib/Drupal/Core/Entity/Entity/EntityViewDisplay.php +++ b/core/lib/Drupal/Core/Entity/Entity/EntityViewDisplay.php @@ -13,6 +13,7 @@ use Drupal\Core\Entity\EntityStorageInterface; use Drupal\Core\Entity\FieldableEntityInterface; use Drupal\Core\Entity\EntityDisplayBase; +use Drupal\Core\Render\BubbleableMetadata; /** * Configuration entity that contains display options for all components of a @@ -238,8 +239,16 @@ public function buildMultiple(array $entities) { // Then let the formatter build the output for each entity. foreach ($entities as $key => $entity) { $items = $entity->get($field_name); - $build_list[$key][$field_name] = $formatter->view($items); - $build_list[$key][$field_name]['#access'] = $items->access('view'); + /** @var \Drupal\Core\Access\AccessResultInterface $field_access */ + $field_access = $items->access('view', NULL, TRUE); + $build_list[$key][$field_name] = []; + if ($field_access->isAllowed()) { + $build_list[$key][$field_name] = $formatter->view($items); + } + // Apply the field access cacheability metadata to the render array. + BubbleableMetadata::createFromRenderArray($build_list[$key][$field_name]) + ->merge(BubbleableMetadata::createFromAccessResult($field_access)) + ->applyTo($build_list[$key][$field_name]); } } } diff --git a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php index af5abe0..f2d7f38 100644 --- a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php +++ b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php @@ -184,7 +184,6 @@ protected function getBuildDefaults(EntityInterface $entity, $view_mode, $langco ), 'contexts' => array( 'theme', - 'user.roles', ), 'bin' => $this->cacheBin, );