diff --git a/src/Plugin/EntityBrowser/Widget/View.php b/src/Plugin/EntityBrowser/Widget/View.php
index 8e78276..175b4c5 100644
--- a/src/Plugin/EntityBrowser/Widget/View.php
+++ b/src/Plugin/EntityBrowser/Widget/View.php
@@ -3,6 +3,7 @@
 namespace Drupal\entity_browser\Plugin\EntityBrowser\Widget;
 
 use Drupal\Component\Plugin\Exception\PluginNotFoundException;
+use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Render\Element;
 use Drupal\entity_browser\WidgetBase;
@@ -264,4 +265,21 @@ public function submitConfigurationForm(array &$form, FormStateInterface $form_s
     }
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function access($return_as_object = FALSE) {
+    // Mark the widget as not visible if the user has no access to the view.
+    /** @var \Drupal\views\ViewExecutable $view */
+    $view = $this->entityTypeManager
+      ->getStorage('view')
+      ->load($this->configuration['view'])
+      ->getExecutable();
+
+
+    // Check if the current user has access to this view.
+    $result = AccessResult::allowedIf($view->access($this->configuration['view_display']));
+    return $return_as_object ? $result : $result->isAllowed();
+  }
+
 }
diff --git a/src/Plugin/EntityBrowser/WidgetSelector/DropDown.php b/src/Plugin/EntityBrowser/WidgetSelector/DropDown.php
index 1cb3483..784df3a 100644
--- a/src/Plugin/EntityBrowser/WidgetSelector/DropDown.php
+++ b/src/Plugin/EntityBrowser/WidgetSelector/DropDown.php
@@ -2,8 +2,11 @@
 
 namespace Drupal\entity_browser\Plugin\EntityBrowser\WidgetSelector;
 
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\entity_browser\WidgetSelectorBase;
 use Drupal\Core\Form\FormStateInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Displays widgets in a select list.
@@ -14,7 +17,35 @@
  *   description = @Translation("Displays the widgets in a drop down.")
  * )
  */
-class DropDown extends WidgetSelectorBase {
+class DropDown extends WidgetSelectorBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * The Entity Type Manager
+   *
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
+   */
+  protected $entityTypeManager;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct($configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+
+    $this->entityTypeManager = $entity_type_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('entity_type.manager')
+    );
+  }
 
   /**
    * {@inheritdoc}
@@ -24,9 +55,17 @@ public function getForm(array &$form = array(), FormStateInterface &$form_state
     $form['#prefix'] = '<div id="entity-browser-form">';
     $form['#suffix'] = '</div>';
 
+    $browser_id = substr(substr($form_state->getBuildInfo()['form_id'], 15), 0, -5);
+    /** @var \Drupal\entity_browser\EntityBrowserInterface $browser */
+    $browser = $this->entityTypeManager->getStorage('entity_browser')->load($browser_id);
+
+    $widget_ids = array_filter($this->widget_ids, function ($id) use ($browser) {
+      return $browser->getWidget($id)->access();
+    }, ARRAY_FILTER_USE_KEY);
+
     $element['widget'] = array(
       '#type' => 'select',
-      '#options' => $this->widget_ids,
+      '#options' => $widget_ids,
       '#default_value' => $this->getDefaultWidget(),
       '#executes_submit_callback' => TRUE,
       '#limit_validation_errors' => array(array('widget')),
diff --git a/src/Plugin/EntityBrowser/WidgetSelector/Tabs.php b/src/Plugin/EntityBrowser/WidgetSelector/Tabs.php
index b0c1f60..fc1e6db 100644
--- a/src/Plugin/EntityBrowser/WidgetSelector/Tabs.php
+++ b/src/Plugin/EntityBrowser/WidgetSelector/Tabs.php
@@ -2,8 +2,11 @@
 
 namespace Drupal\entity_browser\Plugin\EntityBrowser\WidgetSelector;
 
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\entity_browser\WidgetSelectorBase;
 use Drupal\Core\Form\FormStateInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Displays entity browser widgets as tabs.
@@ -14,27 +17,60 @@
  *   description = @Translation("Creates horizontal tabs on the top of the entity browser, each tab representing one available widget.")
  * )
  */
-class Tabs extends WidgetSelectorBase {
+class Tabs extends WidgetSelectorBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * The Entity Type Manager
+   *
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
+   */
+  protected $entityTypeManager;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct($configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+
+    $this->entityTypeManager = $entity_type_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('entity_type.manager')
+    );
+  }
 
   /**
    * {@inheritdoc}
    */
   public function getForm(array &$form = array(), FormStateInterface &$form_state = NULL) {
     $element = [];
+    $browser_id = substr(substr($form_state->getBuildInfo()['form_id'], 15), 0, -5);
+    /** @var \Drupal\entity_browser\EntityBrowserInterface $browser */
+    $browser = $this->entityTypeManager->getStorage('entity_browser')->load($browser_id);
     foreach ($this->widget_ids as $id => $label) {
-      $name = 'tab_selector_' . $id;
-      $element[$name] = array(
-        '#type' => 'button',
-        '#attributes' => ['class' => ['tab']],
-        '#value' => $label,
-        '#disabled' => $id == $this->getDefaultWidget(),
-        '#executes_submit_callback' => TRUE,
-        '#limit_validation_errors' => array(array($id)),
-        // #limit_validation_errors only takes effect if #submit is present.
-        '#submit' => array(),
-        '#name' => $name,
-        '#widget_id' => $id,
-      );
+      if (!empty($browser) && $browser->getWidget($id)->access()) {
+        $name = 'tab_selector_' . $id;
+        $element[$name] = array(
+          '#type' => 'button',
+          '#attributes' => ['class' => ['tab']],
+          '#value' => $label,
+          '#disabled' => $id == $this->getDefaultWidget(),
+          '#executes_submit_callback' => TRUE,
+          '#limit_validation_errors' => array(array($id)),
+          // #limit_validation_errors only takes effect if #submit is present.
+          '#submit' => array(),
+          '#name' => $name,
+          '#widget_id' => $id,
+        );
+      }
     }
 
     $element['#attached']['library'][] = 'entity_browser/tabs';
diff --git a/src/WidgetBase.php b/src/WidgetBase.php
index a7c8fb7..7378f8d 100644
--- a/src/WidgetBase.php
+++ b/src/WidgetBase.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\entity_browser;
 
+use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Plugin\PluginBase;
 use Drupal\Core\Form\FormStateInterface;
@@ -322,4 +323,12 @@ protected function selectEntities(array $entities, FormStateInterface $form_stat
       ));
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function access($return_as_object = FALSE) {
+    $result = AccessResult::allowed();
+    return $return_as_object ? $result : $result->isAllowed();
+  }
+
 }
diff --git a/src/WidgetInterface.php b/src/WidgetInterface.php
index 861033e..f43e97f 100644
--- a/src/WidgetInterface.php
+++ b/src/WidgetInterface.php
@@ -109,4 +109,17 @@ public function validate(array &$form, FormStateInterface $form_state);
    */
   public function submit(array &$element, array &$form, FormStateInterface $form_state);
 
+  /**
+   * Defines if the widget is visible / accessible in a given context.
+   *
+   * @return bool|\Drupal\Core\Access\AccessResultInterface
+   *   The access result. Returns a boolean if $return_as_object is FALSE (this
+   *   is the default) and otherwise an AccessResultInterface object.
+   *   When a boolean is returned, the result of AccessInterface::isAllowed() is
+   *   returned, i.e. TRUE means access is explicitly allowed, thus the widget
+   *   is to be considered accessible by other plugins. FALSE means
+   *   access is either explicitly forbidden or "no opinion".
+   */
+  public function access($return_as_object = FALSE);
+
 }
