diff --git a/src/EntityBrowserFormInterface.php b/src/EntityBrowserFormInterface.php
index 335fe96..d274b6e 100644
--- a/src/EntityBrowserFormInterface.php
+++ b/src/EntityBrowserFormInterface.php
@@ -17,4 +17,12 @@ interface EntityBrowserFormInterface extends FormInterface {
    */
   public function setEntityBrowser(EntityBrowserInterface $entity_browser);
 
+  /**
+   * Gets entity browser entity,
+   *
+   * @return \Drupal\entity_browser\EntityBrowserInterface
+   *   Entity browser entity.
+   */
+  public function getEntityBrowser();
+
 }
diff --git a/src/Form/EntityBrowserForm.php b/src/Form/EntityBrowserForm.php
index 8f3c1e2..2d717cb 100644
--- a/src/Form/EntityBrowserForm.php
+++ b/src/Form/EntityBrowserForm.php
@@ -76,6 +76,13 @@ class EntityBrowserForm extends FormBase implements EntityBrowserFormInterface {
   }
 
   /**
+   * {@inheritdoc}
+   */
+  public function getEntityBrowser() {
+    return $this->entityBrowser;
+  }
+
+  /**
    * Initializes form state.
    *
    * @param \Drupal\Core\Form\FormStateInterface $form_state
diff --git a/src/Plugin/EntityBrowser/Widget/View.php b/src/Plugin/EntityBrowser/Widget/View.php
index 605f782..ba3d714 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;
@@ -279,4 +280,21 @@ class View extends WidgetBase implements ContainerFactoryPluginInterface {
     return $dependencies;
   }
 
+  /**
+   * {@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..ab6abf7 100644
--- a/src/Plugin/EntityBrowser/WidgetSelector/DropDown.php
+++ b/src/Plugin/EntityBrowser/WidgetSelector/DropDown.php
@@ -24,9 +24,19 @@ class DropDown extends WidgetSelectorBase {
     $form['#prefix'] = '<div id="entity-browser-form">';
     $form['#suffix'] = '</div>';
 
+    /** @var \Drupal\entity_browser\EntityBrowserInterface $browser */
+    $browser = $form_state->getFormObject()->getEntityBrowser();
+
+    $widget_ids = [];
+    foreach (array_keys($this->widget_ids) as $id) {
+      if ($browser->getWidget($id)->access()) {
+        $widget_ids[$id] = $this->widget_ids[$id];
+      }
+    }
+
     $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..6678b04 100644
--- a/src/Plugin/EntityBrowser/WidgetSelector/Tabs.php
+++ b/src/Plugin/EntityBrowser/WidgetSelector/Tabs.php
@@ -21,6 +21,8 @@ class Tabs extends WidgetSelectorBase {
    */
   public function getForm(array &$form = array(), FormStateInterface &$form_state = NULL) {
     $element = [];
+    /** @var \Drupal\entity_browser\EntityBrowserInterface $browser */
+    $browser = $form_state->getFormObject()->getEntityBrowser();
     foreach ($this->widget_ids as $id => $label) {
       $name = 'tab_selector_' . $id;
       $element[$name] = array(
@@ -34,6 +36,7 @@ class Tabs extends WidgetSelectorBase {
         '#submit' => array(),
         '#name' => $name,
         '#widget_id' => $id,
+        '#access' => $browser->getWidget($id)->access(),
       );
     }
 
diff --git a/src/WidgetBase.php b/src/WidgetBase.php
index e2479df..bea4df6 100644
--- a/src/WidgetBase.php
+++ b/src/WidgetBase.php
@@ -3,6 +3,7 @@
 namespace Drupal\entity_browser;
 
 use Drupal\Component\Utility\NestedArray;
+use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Plugin\PluginBase;
 use Drupal\Core\Form\FormStateInterface;
@@ -361,4 +362,12 @@ abstract class WidgetBase extends PluginBase implements WidgetInterface, Contain
     return $this->getPluginDefinition()['auto_select'] && $this->getConfiguration()['settings']['auto_select'];
   }
 
+  /**
+   * {@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 0a1140f..005bb58 100644
--- a/src/WidgetInterface.php
+++ b/src/WidgetInterface.php
@@ -118,4 +118,17 @@ interface WidgetInterface extends PluginInspectionInterface, ConfigurablePluginI
    */
   public function requiresJsCommands();
 
+  /**
+   * 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);
+
 }
