diff --git a/core/core.services.yml b/core/core.services.yml index 22e60be..eef5808 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -199,7 +199,7 @@ services: scope: request plugin.manager.menu.contextual_link: class: Drupal\Core\Menu\ContextualLinkManager - arguments: ['@controller_resolver', '@module_handler', '@cache.cache', '@language_manager', '@access_manager'] + arguments: ['@controller_resolver', '@module_handler', '@cache.cache', '@language_manager', '@access_manager', '@current_user'] request: class: Symfony\Component\HttpFoundation\Request # @TODO the synthetic setting must be uncommented whenever drupal_session_initialize() diff --git a/core/lib/Drupal/Core/Menu/ContextualLinkManager.php b/core/lib/Drupal/Core/Menu/ContextualLinkManager.php index c06dfe6..5141f5c 100644 --- a/core/lib/Drupal/Core/Menu/ContextualLinkManager.php +++ b/core/lib/Drupal/Core/Menu/ContextualLinkManager.php @@ -17,6 +17,7 @@ use Drupal\Core\Plugin\Discovery\ContainerDerivativeDiscoveryDecorator; use Drupal\Core\Plugin\Discovery\YamlDiscovery; use Drupal\Core\Plugin\Factory\ContainerFactory; +use Drupal\Core\Session\AccountInterface; /** * Defines a contextual link plugin manager to deal with contextual links. @@ -62,6 +63,13 @@ class ContextualLinkManager extends DefaultPluginManager implements ContextualLi protected $accessManager; /** + * The current user. + * + * @var \Drupal\Core\Session\AccountInterface + */ + protected $account; + + /** * A static cache of all the contextual link plugins by group name. * * @var array @@ -81,14 +89,17 @@ class ContextualLinkManager extends DefaultPluginManager implements ContextualLi * The language manager. * @param \Drupal\Core\Access\AccessManager $access_manager * The access manager. + * @param \Drupal\Core\Session\AccountInterface $account + * The current user. */ - public function __construct(ControllerResolverInterface $controller_resolver, ModuleHandlerInterface $module_handler, CacheBackendInterface $cache_backend, LanguageManager $language_manager, AccessManager $access_manager) { + public function __construct(ControllerResolverInterface $controller_resolver, ModuleHandlerInterface $module_handler, CacheBackendInterface $cache_backend, LanguageManager $language_manager, AccessManager $access_manager, AccountInterface $account) { $this->discovery = new YamlDiscovery('contextual_links', $module_handler->getModuleDirectories()); $this->discovery = new ContainerDerivativeDiscoveryDecorator($this->discovery); $this->factory = new ContainerFactory($this); $this->controllerResolver = $controller_resolver; $this->accessManager = $access_manager; + $this->account = $account; $this->alterInfo($module_handler, 'contextual_links_plugins'); $this->setCacheBackend($cache_backend, $language_manager, 'contextual_links_plugins'); } @@ -144,7 +155,7 @@ public function getContextualLinksArrayByGroup($group_name, array $route_paramet $route_name = $plugin->getRouteName(); // Check access. - if (!$this->accessManager->checkNamedRoute($route_name, $route_parameters)) { + if (!$this->accessManager->checkNamedRoute($route_name, $route_parameters, $this->account)) { continue; }