Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
2 / 2 |
CRAP | |
100.00% |
7 / 7 |
CustomAccessCheck | |
100.00% |
1 / 1 |
|
100.00% |
2 / 2 |
2 | |
100.00% |
7 / 7 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
access | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Access\CustomAccessCheck. | |
*/ | |
namespace Drupal\Core\Access; | |
use Drupal\Core\Controller\ControllerResolverInterface; | |
use Drupal\Core\Routing\Access\AccessInterface as RoutingAccessInterface; | |
use Drupal\Core\Routing\RouteMatchInterface; | |
use Drupal\Core\Session\AccountInterface; | |
use Symfony\Component\Routing\Route; | |
/** | |
* Defines an access checker that allows specifying a custom method for access. | |
* | |
* You should only use it when you are sure that the access callback will not be | |
* reused. Good examples in core are Edit or Toolbar module. | |
* | |
* The method is called on another instance of the controller class, so you | |
* cannot reuse any stored property of your actual controller instance used | |
* to generate the output. | |
*/ | |
class CustomAccessCheck implements RoutingAccessInterface { | |
/** | |
* The controller resolver. | |
* | |
* @var \Drupal\Core\Controller\ControllerResolverInterface | |
*/ | |
protected $controllerResolver; | |
/** | |
* The arguments resolver. | |
* | |
* @var \Drupal\Core\Access\AccessArgumentsResolverFactoryInterface | |
*/ | |
protected $argumentsResolverFactory; | |
/** | |
* Constructs a CustomAccessCheck instance. | |
* | |
* @param \Drupal\Core\Controller\ControllerResolverInterface $controller_resolver | |
* The controller resolver. | |
* @param \Drupal\Core\Access\AccessArgumentsResolverFactoryInterface $arguments_resolver_factory | |
* The arguments resolver factory. | |
*/ | |
public function __construct(ControllerResolverInterface $controller_resolver, AccessArgumentsResolverFactoryInterface $arguments_resolver_factory) { | |
$this->controllerResolver = $controller_resolver; | |
$this->argumentsResolverFactory = $arguments_resolver_factory; | |
} | |
/** | |
* Checks access for the account and route using the custom access checker. | |
* | |
* @param \Symfony\Component\Routing\Route $route | |
* The route. | |
* @param \Drupal\Core\Routing\RouteMatchInterface $route_match | |
* The route match object to be checked. | |
* @param \Drupal\Core\Session\AccountInterface $account | |
* The account being checked. | |
* | |
* @return \Drupal\Core\Access\AccessResultInterface | |
* The access result. | |
*/ | |
public function access(Route $route, RouteMatchInterface $route_match, AccountInterface $account) { | |
$callable = $this->controllerResolver->getControllerFromDefinition($route->getRequirement('_custom_access')); | |
$arguments_resolver = $this->argumentsResolverFactory->getArgumentsResolver($route_match, $account); | |
$arguments = $arguments_resolver->getArguments($callable); | |
return call_user_func_array($callable, $arguments); | |
} | |
} |