/* Decoded by unphp.net */ eventDispatcher = $dispatcher; } /** * {@inheritdoc} */ public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { return new static( $entity_type, $container->get('event_dispatcher') ); } /** * {@inheritdoc} */ protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) { assert($entity instanceof BlockContentInterface); $bundle = $entity->bundle(); $forbidIfNotReusable = fn (): AccessResultInterface => AccessResult::forbiddenIf($entity->isReusable() === FALSE, sprintf('Block content must be reusable to use `%s` operation', $operation)); $access = AccessResult::allowedIfHasPermissions($account, ['administer block content']); if (!$access->isAllowed()) { $access = match ($operation) { // Allow view and update access to user with the 'edit any (type) block // content' permission or the 'administer block content' permission. 'view' => AccessResult::allowedIf($entity->isPublished()) ->orIf(AccessResult::allowedIfHasPermission($account, 'access block library')), 'update' => AccessResult::allowedIfHasPermission($account, 'edit any ' . $bundle . ' block content'), 'delete' => AccessResult::allowedIfHasPermission($account, 'delete any ' . $bundle . ' block content'), // Revisions. 'view revision', 'view all revisions' => AccessResult::allowedIfHasPermission($account, 'view any ' . $bundle . ' block content history'), 'revert' => AccessResult::allowedIfHasPermission($account, 'revert any ' . $bundle . ' block content revisions') ->orIf($forbidIfNotReusable()), 'delete revision' => AccessResult::allowedIfHasPermission($account, 'delete any ' . $bundle . ' block content revisions') ->orIf($forbidIfNotReusable()), default => parent::checkAccess($entity, $operation, $account), }; } // Add the entity as a cacheable dependency because access will at least be // determined by whether the block is reusable. $access->addCacheableDependency($entity); if ($entity->isReusable() === FALSE && $access->isForbidden() !== TRUE) { if (!$entity instanceof DependentAccessInterface) { throw new \LogicException("Non-reusable block entities must implement \Drupallock_content\Access\DependentAccessInterface for access control."); } $dependency = $entity->getAccessDependency(); if (empty($dependency)) { // If an access dependency has not been set let modules set one. $event = new BlockContentGetDependencyEvent($entity); $this->eventDispatcher->dispatch($event, BlockContentEvents::BLOCK_CONTENT_GET_DEPENDENCY); $dependency = $event->getAccessDependency(); if (empty($dependency)) { return AccessResult::forbidden("Non-reusable blocks must set an access dependency for access control."); } } /** @var \Drupal\Core\Entity\EntityInterface $dependency */ $access = $access->andIf($dependency->access($operation, $account, TRUE)); } return $access; } /** * {@inheritdoc} */ protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) { return AccessResult::allowedIfHasPermissions($account, [ 'create ' . $entity_bundle . ' block content', 'administer block content', ], 'OR'); } } ?>