hasHandlerClass('permission_provider') || !is_a($entity_type->getHandlerClass('permission_provider'), UncacheableEntityPermissionProvider::class, TRUE)) { throw new \Exception('\Drupal\entity\UncacheableEntityAccessControlHandler requires the \Drupal\entity\UncacheableEntityPermissionProvider permission provider.'); } } /** * {@inheritdoc} */ protected function checkEntityOwnerPermissions(EntityInterface $entity, $operation, AccountInterface $account) { /** @var \Drupal\user\EntityOwnerInterface $entity */ if ($operation === 'view' && $entity instanceof EntityPublishedInterface && !$entity->isPublished()) { if ($account->id() != $entity->getOwnerId()) { // There's no permission for viewing other user's unpublished entity. return AccessResult::neutral()->cachePerUser(); } $permissions = [ "view own unpublished {$entity->getEntityTypeId()}", ]; $result = AccessResult::allowedIfHasPermissions($account, $permissions)->cachePerUser(); } else { $result = parent::checkEntityOwnerPermissions($entity, $operation, $account); } return $result; } }