Рейтинг:1

Обработчик доступа к объекту, вызывающий «Результат контроллера утверждает, что предоставляет соответствующие метаданные кэша, но была обнаружена утечка метаданных».

флаг ph

Я пишу обработчик доступа к пользовательскому объекту для пользовательского объекта, который проверяет, есть ли у пользователя доступ к базовому узлу. Код checkAccess() выглядит следующим образом:

$uuid = $entity->uuid->getString();
если (isset($uuid)) {
  $nodes = $this->node->getQuery()->accessCheck(TRUE)->условие('uuid', $uuid)->execute();
  если (!пусто($узлы)) {
    вернуть AccessResult::allowed();
  }
}
return AccessResult::forbidden("Доступ запрещен.");

Проблема в том, что когда я перехожу к конечной точке jsonapi для объекта, я получаю сообщение об ошибке "Результат контроллера утверждает, что предоставляет соответствующие метаданные кэша, но была обнаружена утечка метаданных. Пожалуйста, убедитесь, что вы не рендерите контент слишком рано. Класс возвращаемого объекта: Drupal\jsonapi\CacheableResourceResponse."

Если я верну accessResult::allowed() перед запросом $nodes, он сработает. Что тут происходит?

4uk4 avatar
флаг cn
accessCheck(TRUE) допускает утечку метаданных, см. Почему бы не использовать $entity->access('view')?
Lambic avatar
флаг ph
Похоже, если я загружу узел, а затем сделаю $node->access('view'), он сработает, опубликую это как ответ
Рейтинг:2
флаг ph

Похоже, что использование accessCheck(TRUE) вызывает это, поэтому обходной путь:

если (isset($uuid)) {
  $node = $this->node->loadByProperties(['uuid' => $uuid]);
  $ узел = сброс ($ действие);
  если ($ узел-> доступ ('представление')) {
    вернуть AccessResult::allowed();
  }
}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.