improvements-2.x-dev/src/Access/EntityUuidAccessCheck.php
src/Access/EntityUuidAccessCheck.php
<?php namespace Drupal\improvements\Access; use Drupal\Core\Access\AccessResult; use Drupal\Core\Access\AccessResultInterface; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Routing\Access\AccessInterface; use Drupal\Core\Routing\RouteMatchInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Route; class EntityUuidAccessCheck implements AccessInterface { /** * Checks access based on a uuid $_GET parameter for the request. */ public function access(Route $route, RouteMatchInterface $route_match, Request $request): AccessResultInterface { if ($request_uuid = $request->query->get('uuid')) { $entity = $this->getEntityFromRoute($route_match); if ($entity && $request_uuid == $entity->uuid()) { return AccessResult::allowed(); } } return AccessResult::forbidden(); } /** * Return entity from route. */ protected function getEntityFromRoute(RouteMatchInterface $route_match): ?EntityInterface { foreach ($route_match->getParameters() as $route_parameter) { if ($route_parameter instanceof EntityInterface) { return $route_parameter; } } return NULL; } }