content_entity_base-8.x-1.x-dev/src/Entity/Access/EntityBaseAccessControlHandler.php
src/Entity/Access/EntityBaseAccessControlHandler.php
<?php namespace Drupal\content_entity_base\Entity\Access; use Drupal\Core\Access\AccessResult; use Drupal\Core\Entity\EntityAccessControlHandler; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Session\AccountInterface; /** * Defines the access control handler for a custom entity type. */ class EntityBaseAccessControlHandler extends EntityAccessControlHandler { /** * {@inheritdoc} */ protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) { $access = parent::checkAccess($entity, $operation, $account); // List is here for revision access. You cannot have a "list" all entities // _entity_access check because _entity_access requires a single entity. if (in_array($operation, ['view', 'list'])) { $access = $access ->orIf(AccessResult::allowedIfHasPermission($account, 'access ' . $entity->getEntityTypeId())) ->orIf(AccessResult::allowedIfHasPermission($account, 'administer ' . $entity->getEntityTypeId())); } return $access; } /** * {@inheritdoc} */ protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) { $allowed_permissions = []; if ($admin_permission = $this->entityType->getAdminPermission()) { $allowed_permissions[] = $admin_permission; } if ($entity_bundle) { $allowed_permissions[] = "create {$entity_bundle} {$this->entityTypeId}"; } foreach ($allowed_permissions as $allowed_permission) { if ($account->hasPermission($allowed_permission)) { return AccessResult::allowed()->addCacheContexts(['user.permissions']); } } return AccessResult::neutral(); } }