Code Coverage  | 
     ||||||||||
Classes and Traits  | 
      Functions and Methods  | 
      Lines  | 
     ||||||||
| Total |         | 
      0.00%  | 
      0 / 1  | 
              | 
      0.00%  | 
      0 / 3  | 
      CRAP |         | 
      0.00%  | 
      0 / 24  | 
     
| MenuLinkContentAccessControlHandler |         | 
      0.00%  | 
      0 / 1  | 
              | 
      0.00%  | 
      0 / 3  | 
      110 |         | 
      0.00%  | 
      0 / 24  | 
     
| __construct |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 3  | 
     |||
| createInstance |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 2  | 
     |||
| checkAccess |         | 
      0.00%  | 
      0 / 1  | 
      72 |         | 
      0.00%  | 
      0 / 19  | 
     |||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\menu_link_content\MenuLinkContentAccessControlHandler. | |
| */ | |
| namespace Drupal\menu_link_content; | |
| use Drupal\Core\Access\AccessResult; | |
| use Drupal\Core\Access\AccessManagerInterface; | |
| use Drupal\Core\Entity\EntityAccessControlHandler; | |
| use Drupal\Core\Entity\EntityHandlerInterface; | |
| use Drupal\Core\Entity\EntityInterface; | |
| use Drupal\Core\Entity\EntityTypeInterface; | |
| use Drupal\Core\Session\AccountInterface; | |
| use Symfony\Component\DependencyInjection\ContainerInterface; | |
| /** | |
| * Defines the access control handler for the user entity type. | |
| */ | |
| class MenuLinkContentAccessControlHandler extends EntityAccessControlHandler implements EntityHandlerInterface { | |
| /** | |
| * The access manager to check routes by name. | |
| * | |
| * @var \Drupal\Core\Access\AccessManagerInterface | |
| */ | |
| protected $accessManager; | |
| /** | |
| * Creates a new MenuLinkContentAccessControlHandler. | |
| * | |
| * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type | |
| * The entity type definition. | |
| * @param \Drupal\Core\Access\AccessManagerInterface $access_manager | |
| * The access manager to check routes by name. | |
| */ | |
| public function __construct(EntityTypeInterface $entity_type, AccessManagerInterface $access_manager) { | |
| parent::__construct($entity_type); | |
| $this->accessManager = $access_manager; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { | |
| return new static($entity_type, $container->get('access_manager')); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) { | |
| switch ($operation) { | |
| case 'view': | |
| // There is no direct viewing of a menu link, but still for purposes of | |
| // content_translation we need a generic way to check access. | |
| return AccessResult::allowedIfHasPermission($account, 'administer menu'); | |
| case 'update': | |
| if (!$account->hasPermission('administer menu')) { | |
| return AccessResult::neutral()->cachePerPermissions(); | |
| } | |
| else { | |
| // If there is a URL, this is an external link so always accessible. | |
| $access = AccessResult::allowed()->cachePerPermissions()->cacheUntilEntityChanges($entity); | |
| /** @var \Drupal\menu_link_content\MenuLinkContentInterface $entity */ | |
| // We allow access, but only if the link is accessible as well. | |
| if (($url_object = $entity->getUrlObject()) && $url_object->isRouted()) { | |
| $link_access = $this->accessManager->checkNamedRoute($url_object->getRouteName(), $url_object->getRouteParameters(), $account, TRUE); | |
| $access = $access->andIf($link_access); | |
| } | |
| return $access; | |
| } | |
| case 'delete': | |
| return AccessResult::allowedIf(!$entity->isNew() && $account->hasPermission('administer menu'))->cachePerPermissions()->cacheUntilEntityChanges($entity); | |
| } | |
| } | |
| } |