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 340e425..80ea0a9 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..a5dd437 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 ($this->widget_ids as $widget_id => $widget_name) {
+      if ($browser->getWidget($widget_id)->access()) {
+        $widget_ids[$widget_id] = $widget_name;
+      }
+    }
+
     $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 da094e4..be28f61 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;
@@ -372,4 +373,12 @@ abstract class WidgetBase extends PluginBase implements WidgetInterface, Contain
     }
   }
 
+  /**
+   * {@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);
+
 }
diff --git a/tests/modules/entity_browser_test/config/install/entity_browser.browser.test_entity_browser_file.yml b/tests/modules/entity_browser_test/config/install/entity_browser.browser.test_entity_browser_file.yml
index 65178f0..1956d39 100644
--- a/tests/modules/entity_browser_test/config/install/entity_browser.browser.test_entity_browser_file.yml
+++ b/tests/modules/entity_browser_test/config/install/entity_browser.browser.test_entity_browser_file.yml
@@ -35,3 +35,9 @@ widgets:
     weight: -10
     label: view
     id: view
+  cbc59500-04ab-4395-b063-c561f0e3bf80:
+    id: dummy
+    label: dummy
+    weight: -8
+    uuid: cbc59500-04ab-4395-b063-c561f0e3bf80
+    settings: { }
diff --git a/tests/modules/entity_browser_test/src/Plugin/EntityBrowser/Widget/DummyWidget.php b/tests/modules/entity_browser_test/src/Plugin/EntityBrowser/Widget/DummyWidget.php
index 7d19edf..d2961cc 100644
--- a/tests/modules/entity_browser_test/src/Plugin/EntityBrowser/Widget/DummyWidget.php
+++ b/tests/modules/entity_browser_test/src/Plugin/EntityBrowser/Widget/DummyWidget.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\entity_browser_test\Plugin\EntityBrowser\Widget;
 
+use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\entity_browser\WidgetBase;
 
@@ -55,4 +56,17 @@ class DummyWidget extends WidgetBase {
     return $form_state->getValue('dummy_entities', []);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function access($return_as_object = FALSE) {
+    if (\Drupal::state()->get('eb_test_dummy_widget_access', TRUE)) {
+      $access = AccessResult::allowed();
+    }
+    else {
+      $access = AccessResult::forbidden();
+    }
+    return $return_as_object ? $access : $access->isAllowed();
+  }
+
 }
diff --git a/tests/src/FunctionalJavascript/EntityBrowserTest.php b/tests/src/FunctionalJavascript/EntityBrowserTest.php
index e8add2c..d97f8f1 100644
--- a/tests/src/FunctionalJavascript/EntityBrowserTest.php
+++ b/tests/src/FunctionalJavascript/EntityBrowserTest.php
@@ -78,6 +78,7 @@ class EntityBrowserTest extends EntityBrowserJavascriptTestBase {
 
     $this->getSession()->switchToIFrame('entity_browser_iframe_test_entity_browser_file');
 
+    $this->assertSession()->linkExists('dummy');
     $this->assertSession()->linkExists('view');
     $this->assertSession()->linkExists('upload');
 
@@ -102,6 +103,19 @@ class EntityBrowserTest extends EntityBrowserJavascriptTestBase {
     //  'files[upload][]' => $this->container->get('file_system')->realpath($image2->getFileUri()),
     //];
     // $this->drupalPostForm(NULL, $edit, 'Select files');.
+
+    \Drupal::state()->set('eb_test_dummy_widget_access', FALSE);
+
+    $this->drupalGet('node/add/article');
+
+    $this->assertSession()->linkExists('Select entities');
+    $this->getSession()->getPage()->clickLink('Select entities');
+
+    $this->getSession()->switchToIFrame('entity_browser_iframe_test_entity_browser_file');
+
+    $this->assertSession()->linkNotExists('dummy');
+    $this->assertSession()->linkExists('view');
+    $this->assertSession()->linkExists('upload');
   }
 
   /**
@@ -130,6 +144,9 @@ class EntityBrowserTest extends EntityBrowserJavascriptTestBase {
     $this->getSession()->switchToIFrame('entity_browser_iframe_test_entity_browser_file');
 
     $this->assertSession()->selectExists('widget');
+    $this->assertSession()->optionExists('widget', 'cbc59500-04ab-4395-b063-c561f0e3bf80'); // Dummy
+    $this->assertSession()->optionExists('widget', '2dc1ab07-2f8f-42c9-aab7-7eef7f8b7d87'); // Upload
+    $this->assertSession()->optionExists('widget', '774798f1-5ec5-4b63-84bd-124cd51ec07d'); // View
     // Selects the view widget.
     $this->getSession()->getPage()->selectFieldOption('widget', '774798f1-5ec5-4b63-84bd-124cd51ec07d');
 
@@ -148,10 +165,23 @@ class EntityBrowserTest extends EntityBrowserJavascriptTestBase {
     // Causes a fatal.
     // Selects the upload widget.
     // $this->getSession()->getPage()->selectFieldOption('widget', '2dc1ab07-2f8f-42c9-aab7-7eef7f8b7d87');.
+
+    \Drupal::state()->set('eb_test_dummy_widget_access', FALSE);
+
+    $this->drupalGet('node/add/article');
+
+    $this->assertSession()->linkExists('Select entities');
+    $this->getSession()->getPage()->clickLink('Select entities');
+
+    $this->getSession()->switchToIFrame('entity_browser_iframe_test_entity_browser_file');
+
+    $this->assertSession()->optionNotExists('widget', 'cbc59500-04ab-4395-b063-c561f0e3bf80'); // Dummy
+    $this->assertSession()->optionExists('widget', '2dc1ab07-2f8f-42c9-aab7-7eef7f8b7d87'); // Upload
+    $this->assertSession()->optionExists('widget', '774798f1-5ec5-4b63-84bd-124cd51ec07d'); // View
   }
 
   /**
-   * Tests wievs selection display.
+   * Tests views selection display.
    */
   public function testViewsSelectionDisplayWidget() {
 
diff --git a/tests/src/Kernel/Extension/EntityBrowserTest.php b/tests/src/Kernel/Extension/EntityBrowserTest.php
index 8a102b7..16104f9 100644
--- a/tests/src/Kernel/Extension/EntityBrowserTest.php
+++ b/tests/src/Kernel/Extension/EntityBrowserTest.php
@@ -13,6 +13,7 @@ use Drupal\entity_browser\WidgetInterface;
 use Drupal\entity_browser\WidgetSelectorInterface;
 use Drupal\entity_browser\SelectionDisplayInterface;
 use Drupal\KernelTests\KernelTestBase;
+use Drupal\user\Entity\User;
 use Drupal\views\Entity\View;
 
 /**
@@ -466,4 +467,41 @@ class EntityBrowserTest extends KernelTestBase {
     $this->assertEmpty($form_state->getErrors(), t('Validation succeeded where expected'));
   }
 
+  /**
+   * Tests view widget access.
+   */
+  public function testViewWidgetAccess() {
+    $this->installConfig(['entity_browser_test']);
+    $this->installEntitySchema('user');
+    $this->installEntitySchema('user_role');
+
+    /** @var \Drupal\entity_browser\EntityBrowserInterface $entity */
+    $entity = $this->controller->load('test_entity_browser_file');
+
+    $this->assertFalse($entity->getWidget('774798f1-5ec5-4b63-84bd-124cd51ec07d')->access());
+
+    // Create a user that has permission to access the view and try with it.
+    /** @var \Drupal\user\RoleInterface $role */
+    $role = $this->container->get('entity_type.manager')
+      ->getStorage('user_role')
+      ->create([
+        'name' => $this->randomString(),
+        'id' => $this->randomMachineName(),
+      ]);
+    $role->grantPermission('access content');
+    $role->save();
+
+    $user = $this->container->get('entity_type.manager')
+      ->getStorage('user')
+      ->create([
+        'name' => $this->randomString(),
+        'mail' => 'info@example.com',
+        'roles' => $role->id(),
+      ]);
+    $user->save();
+    \Drupal::currentUser()->setAccount($user);
+
+    $this->assertTrue($entity->getWidget('774798f1-5ec5-4b63-84bd-124cd51ec07d')->access());
+  }
+
 }
