Mercurial > hg > isophonics-drupal-site
diff core/modules/shortcut/src/ShortcutAccessControlHandler.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/shortcut/src/ShortcutAccessControlHandler.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,74 @@ +<?php + +namespace Drupal\shortcut; + +use Drupal\Core\Access\AccessResult; +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 shortcut entity type. + * + * @see \Drupal\shortcut\Entity\Shortcut + */ +class ShortcutAccessControlHandler extends EntityAccessControlHandler implements EntityHandlerInterface { + + /** + * The shortcut_set storage. + * + * @var \Drupal\shortcut\ShortcutSetStorageInterface + */ + protected $shortcutSetStorage; + + /** + * Constructs a ShortcutAccessControlHandler object. + * + * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type + * The entity type definition. + * @param \Drupal\shortcut\ShortcutSetStorageInterface $shortcut_set_storage + * The shortcut_set storage. + */ + public function __construct(EntityTypeInterface $entity_type, ShortcutSetStorageInterface $shortcut_set_storage) { + parent::__construct($entity_type); + $this->shortcutSetStorage = $shortcut_set_storage; + } + + /** + * {@inheritdoc} + */ + public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { + return new static( + $entity_type, + $container->get('entity.manager')->getStorage('shortcut_set') + ); + } + + /** + * {@inheritdoc} + */ + protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) { + if ($shortcut_set = $this->shortcutSetStorage->load($entity->bundle())) { + return shortcut_set_edit_access($shortcut_set, $account); + } + // @todo Fix this bizarre code: how can a shortcut exist without a shortcut + // set? The above if-test is unnecessary. See https://www.drupal.org/node/2339903. + return AccessResult::neutral()->addCacheableDependency($entity); + } + + /** + * {@inheritdoc} + */ + protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) { + if ($shortcut_set = $this->shortcutSetStorage->load($entity_bundle)) { + return shortcut_set_edit_access($shortcut_set, $account); + } + // @todo Fix this bizarre code: how can a shortcut exist without a shortcut + // set? The above if-test is unnecessary. See https://www.drupal.org/node/2339903. + return AccessResult::neutral(); + } + +}