comparison core/lib/Drupal/Core/Access/CustomAccessCheck.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 129ea1e6d783
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
1 <?php
2
3 namespace Drupal\Core\Access;
4
5 use Drupal\Core\Controller\ControllerResolverInterface;
6 use Drupal\Core\Routing\Access\AccessInterface as RoutingAccessInterface;
7 use Drupal\Core\Routing\RouteMatchInterface;
8 use Drupal\Core\Session\AccountInterface;
9 use Symfony\Component\Routing\Route;
10
11 /**
12 * Defines an access checker that allows specifying a custom method for access.
13 *
14 * You should only use it when you are sure that the access callback will not be
15 * reused. Good examples in core are Edit or Toolbar module.
16 *
17 * The method is called on another instance of the controller class, so you
18 * cannot reuse any stored property of your actual controller instance used
19 * to generate the output.
20 */
21 class CustomAccessCheck implements RoutingAccessInterface {
22
23 /**
24 * The controller resolver.
25 *
26 * @var \Drupal\Core\Controller\ControllerResolverInterface
27 */
28 protected $controllerResolver;
29
30 /**
31 * The arguments resolver.
32 *
33 * @var \Drupal\Core\Access\AccessArgumentsResolverFactoryInterface
34 */
35 protected $argumentsResolverFactory;
36
37 /**
38 * Constructs a CustomAccessCheck instance.
39 *
40 * @param \Drupal\Core\Controller\ControllerResolverInterface $controller_resolver
41 * The controller resolver.
42 * @param \Drupal\Core\Access\AccessArgumentsResolverFactoryInterface $arguments_resolver_factory
43 * The arguments resolver factory.
44 */
45 public function __construct(ControllerResolverInterface $controller_resolver, AccessArgumentsResolverFactoryInterface $arguments_resolver_factory) {
46 $this->controllerResolver = $controller_resolver;
47 $this->argumentsResolverFactory = $arguments_resolver_factory;
48 }
49
50 /**
51 * Checks access for the account and route using the custom access checker.
52 *
53 * @param \Symfony\Component\Routing\Route $route
54 * The route.
55 * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
56 * The route match object to be checked.
57 * @param \Drupal\Core\Session\AccountInterface $account
58 * The account being checked.
59 *
60 * @return \Drupal\Core\Access\AccessResultInterface
61 * The access result.
62 */
63 public function access(Route $route, RouteMatchInterface $route_match, AccountInterface $account) {
64 $callable = $this->controllerResolver->getControllerFromDefinition($route->getRequirement('_custom_access'));
65 $arguments_resolver = $this->argumentsResolverFactory->getArgumentsResolver($route_match, $account);
66 $arguments = $arguments_resolver->getArguments($callable);
67
68 return call_user_func_array($callable, $arguments);
69 }
70
71 }