diff --git a/core/lib/Drupal/Core/Entity/EntityListController.php b/core/lib/Drupal/Core/Entity/EntityListController.php
index b5a5f9c..b30bcea 100644
--- a/core/lib/Drupal/Core/Entity/EntityListController.php
+++ b/core/lib/Drupal/Core/Entity/EntityListController.php
@@ -95,18 +95,25 @@ public function load() {
    */
   public function getOperations(EntityInterface $entity) {
     $uri = $entity->uri();
-    $operations['edit'] = array(
-      'title' => t('Edit'),
-      'href' => $uri['path'] . '/edit',
-      'options' => $uri['options'],
-      'weight' => 10,
-    );
-    $operations['delete'] = array(
-      'title' => t('Delete'),
-      'href' => $uri['path'] . '/delete',
-      'options' => $uri['options'],
-      'weight' => 100,
-    );
+
+    $operations = array();
+    if ($entity->access('edit')) {
+      $operations['edit'] = array(
+        'title' => t('Edit'),
+        'href' => $uri['path'] . '/edit',
+        'options' => $uri['options'],
+        'weight' => 10,
+      );
+    }
+    if ($entity->access('delete')) {
+      $operations['delete'] = array(
+        'title' => t('Delete'),
+        'href' => $uri['path'] . '/delete',
+        'options' => $uri['options'],
+        'weight' => 100,
+      );
+    }
+
     return $operations;
   }
 
diff --git a/core/modules/config/tests/config_test/lib/Drupal/config_test/ConfigTestAccessController.php b/core/modules/config/tests/config_test/lib/Drupal/config_test/ConfigTestAccessController.php
new file mode 100644
index 0000000..e31cb14
--- /dev/null
+++ b/core/modules/config/tests/config_test/lib/Drupal/config_test/ConfigTestAccessController.php
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\config_test\ConfigTestAccessController.
+ */
+
+namespace Drupal\config_test;
+
+use Drupal\user\Plugin\Core\Entity\User;
+use Drupal\Core\Entity\EntityAccessController;
+use Drupal\Core\Entity\EntityInterface;
+
+/**
+ * Defines the access controller for the config_test entity type.
+ */
+class ConfigTestAccessController extends EntityAccessController {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function access(EntityInterface $entity, $operation, $langcode = LANGUAGE_DEFAULT, User $account = NULL) {
+    return TRUE;
+  }
+
+}
diff --git a/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigTest.php b/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigTest.php
index 7afb306..90705d4 100644
--- a/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigTest.php
+++ b/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigTest.php
@@ -24,7 +24,8 @@
  *     "list" = "Drupal\Core\Config\Entity\ConfigEntityListController",
  *     "form" = {
  *       "default" = "Drupal\config_test\ConfigTestFormController"
- *     }
+ *     },
+ *     "access" = "Drupal\config_test\ConfigTestAccessController"
  *   },
  *   uri_callback = "config_test_uri",
  *   config_prefix = "config_test.dynamic",
diff --git a/core/modules/shortcut/lib/Drupal/shortcut/ShortcutListController.php b/core/modules/shortcut/lib/Drupal/shortcut/ShortcutListController.php
index a40005c..ff12061 100644
--- a/core/modules/shortcut/lib/Drupal/shortcut/ShortcutListController.php
+++ b/core/modules/shortcut/lib/Drupal/shortcut/ShortcutListController.php
@@ -37,9 +37,6 @@ public function getOperations(EntityInterface $entity) {
       'title' => t('List links'),
       'href' => $uri['path'],
     );
-    if (!$entity->access('delete')) {
-      unset($operations['delete']);
-    }
     return $operations;
   }
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php b/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php
index f655945..d7a858a 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php
@@ -24,7 +24,8 @@
  *   label = @Translation("View"),
  *   module = "views",
  *   controllers = {
- *     "storage" = "Drupal\views\ViewStorageController"
+ *     "storage" = "Drupal\views\ViewStorageController",
+ *     "access" = "Drupal\views\ViewAccessController"
  *   },
  *   config_prefix = "views.view",
  *   entity_keys = {
diff --git a/core/modules/views/lib/Drupal/views/ViewAccessController.php b/core/modules/views/lib/Drupal/views/ViewAccessController.php
new file mode 100644
index 0000000..10cd04a
--- /dev/null
+++ b/core/modules/views/lib/Drupal/views/ViewAccessController.php
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\views\ViewAccessController.
+ */
+
+namespace Drupal\views;
+
+use Drupal\user\Plugin\Core\Entity\User;
+use Drupal\Core\Entity\EntityAccessController;
+use Drupal\Core\Entity\EntityInterface;
+
+/**
+ * Defines the access controller for the view entity type.
+ */
+class ViewAccessController extends EntityAccessController {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function access(EntityInterface $entity, $operation, $langcode = LANGUAGE_DEFAULT, User $account = NULL) {
+    return $operation == 'view' || user_access('administer views', $account);
+  }
+
+}
