Same filename and directory in other branches
- 8.9.x core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterAccessChecksPass.php
- 9 core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterAccessChecksPass.php
Namespace
Drupal\Core\DependencyInjection\Compiler
File
core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterAccessChecksPass.php
View source
<?php
namespace Drupal\Core\DependencyInjection\Compiler;
use Drupal\Core\Access\AccessCheckInterface;
use Symfony\Component\DependencyInjection\Compiler\ServiceLocatorTagPass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\Reference;
class RegisterAccessChecksPass implements CompilerPassInterface {
public function process(ContainerBuilder $container) {
if (!$container
->hasDefinition('access_manager')) {
return;
}
$services = [];
$dynamic_access_check_services = [];
$access_manager = $container
->getDefinition('access_manager.check_provider');
foreach ($container
->findTaggedServiceIds('access_check') as $id => $attributes) {
$applies = [];
$method = 'access';
$needs_incoming_request = FALSE;
foreach ($attributes as $attribute) {
if (isset($attribute['applies_to'])) {
$applies[] = $attribute['applies_to'];
}
if (isset($attribute['method'])) {
$method = $attribute['method'];
}
if (!empty($attribute['needs_incoming_request'])) {
$needs_incoming_request = TRUE;
}
}
$access_manager
->addMethodCall('addCheckService', [
$id,
$method,
$applies,
$needs_incoming_request,
]);
$class = $container
->getDefinition($id)
->getClass();
if (in_array(AccessCheckInterface::class, class_implements($class), TRUE)) {
$dynamic_access_check_services[] = $id;
}
$services[$id] = new Reference($id);
}
$access_manager
->addArgument(ServiceLocatorTagPass::register($container, $services));
$container
->setParameter('dynamic_access_check_services', $dynamic_access_check_services);
}
}
Classes