entityTypeManager = $entity_type_manager; $this->tempStore = $temp_store_factory->get('entity_delete_multiple_confirm'); $this->requestStack = $request_stack; } /** * Checks if the user has delete access for at least one item of the store. * * @param \Drupal\Core\Session\AccountInterface $account * Run access checks for this account. * @param string $entity_type_id * Entity type ID. * * @return \Drupal\Core\Access\AccessResult * Allowed or forbidden, neutral if tempstore is empty. */ public function access(AccountInterface $account, $entity_type_id) { $selection = $this->tempStore->get($account->id() . ':' . $entity_type_id); if (empty($selection) || !is_array($selection)) { return AccessResult::neutral(); } $entities = $this->entityTypeManager->getStorage($entity_type_id)->loadMultiple(array_keys($selection)); foreach ($entities as $entity) { // As long as the user has access to delete one entity allow access to the // delete form. Access will be checked again in // Drupal\Core\Entity\Form\DeleteMultipleForm::submit() in case it has // changed in the meantime. if ($entity->access('delete', $account)) { return AccessResult::allowed(); } } return AccessResult::forbidden(); } }