How to exclude Views results for custom entities for which a user has no permission to view them?
After reviewing the list of Views hooks, I think hook_views_pre_render() is the one you can use to filter results before they are rendered.

/**
 * Implements hook_views_pre_render().
 */
function MODULE_views_pre_render(ViewExecutable $view) {
  if (!empty($view-&gt;result)) {
    $entities = [
      'your_custom_entity_id',
      'another_entity_id',
    ];

    foreach ($view-&gt;result as $key =&gt; $result) {
      if (empty($result-&gt;_entity)) {
        continue;
      }

      if (!in_array($result-&gt;_entity-&gt;getEntityTypeId(), $entities)) {
        continue;
      }

      $access = \Drupal::entityTypeManager()
        -&gt;getAccessControlHandler($result-&gt;_entity-&gt;getEntityTypeId())
        -&gt;access($result-&gt;_entity, 'view', NULL, TRUE);

      if (!$access-&gt;isAllowed()) {
        unset($view-&gt;result[$key]);
      }
    }
  }
}