diff --git a/core/lib/Drupal/Core/Entity/Entity.php b/core/lib/Drupal/Core/Entity/Entity.php
index 8af2040..34ccd27 100644
--- a/core/lib/Drupal/Core/Entity/Entity.php
+++ b/core/lib/Drupal/Core/Entity/Entity.php
@@ -588,4 +588,11 @@ public static function postLoad(EntityStorageControllerInterface $storage_contro
   public function preSaveRevision(EntityStorageControllerInterface $storage_controller, \stdClass $record) {
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getOperationLinks() {
+    return array();
+  }
+
 }
diff --git a/core/lib/Drupal/Core/Entity/EntityBCDecorator.php b/core/lib/Drupal/Core/Entity/EntityBCDecorator.php
index d292a73..35f9bc6 100644
--- a/core/lib/Drupal/Core/Entity/EntityBCDecorator.php
+++ b/core/lib/Drupal/Core/Entity/EntityBCDecorator.php
@@ -589,4 +589,12 @@ public static function postDelete(EntityStorageControllerInterface $storage_cont
    */
   public static function postLoad(EntityStorageControllerInterface $storage_controller, array $entities) {
   }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getOperationLinks() {
+    return $this->decorated->getOperationLinks();
+  }
+
 }
diff --git a/core/lib/Drupal/Core/Entity/EntityInterface.php b/core/lib/Drupal/Core/Entity/EntityInterface.php
index b8fe82b..482493d 100644
--- a/core/lib/Drupal/Core/Entity/EntityInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityInterface.php
@@ -323,4 +323,11 @@ public function getNGEntity();
    */
   public function isTranslatable();
 
+  /**
+   * Returns a list of operation links available for this entity.
+   *
+   * @return array
+   */
+  public function getOperationLinks();
+
 }
diff --git a/core/modules/block/lib/Drupal/block/BlockBase.php b/core/modules/block/lib/Drupal/block/BlockBase.php
index 6efda89..6a219bd 100644
--- a/core/modules/block/lib/Drupal/block/BlockBase.php
+++ b/core/modules/block/lib/Drupal/block/BlockBase.php
@@ -224,4 +224,12 @@ public function submit($form, &$form_state) {
    * @see \Drupal\block\BlockBase::submit()
    */
   public function blockSubmit($form, &$form_state) {}
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getOperationLinks() {
+    return array();
+  }
+
 }
diff --git a/core/modules/block/lib/Drupal/block/BlockInterface.php b/core/modules/block/lib/Drupal/block/BlockInterface.php
index cf049a5..a41dd0c 100644
--- a/core/modules/block/lib/Drupal/block/BlockInterface.php
+++ b/core/modules/block/lib/Drupal/block/BlockInterface.php
@@ -22,4 +22,11 @@
    */
   public function getPlugin();
 
+  /**
+   * Returns a list of operation links available for this entity.
+   *
+   * @return array
+   */
+  public function getOperationLinks();
+
 }
diff --git a/core/modules/block/lib/Drupal/block/BlockListController.php b/core/modules/block/lib/Drupal/block/BlockListController.php
index 6a5a2ed..18c6223 100644
--- a/core/modules/block/lib/Drupal/block/BlockListController.php
+++ b/core/modules/block/lib/Drupal/block/BlockListController.php
@@ -174,6 +174,7 @@ public function buildForm(array $form, array &$form_state) {
           'no_striping' => TRUE,
         ),
       );
+
       $form['blocks'][$region]['title'] = array(
         '#markup' => $region != BLOCK_REGION_NONE ? $title : t('Disabled'),
         '#wrapper_attributes' => array(
@@ -190,6 +191,7 @@ public function buildForm(array $form, array &$form_state) {
           ),
         ),
       );
+
       $form['blocks'][$region . '-message']['message'] = array(
         '#markup' => '<em>' . t('No blocks in this region') . '</em>',
         '#wrapper_attributes' => array(
@@ -240,6 +242,7 @@ public function buildForm(array $form, array &$form_state) {
               'class' => array('block-weight', 'block-weight-' . $region),
             ),
           );
+          $links = array();
           $links['configure'] = array(
             'title' => t('configure'),
             'href' => 'admin/structure/block/manage/' . $entity_id . '/configure',
@@ -248,6 +251,7 @@ public function buildForm(array $form, array &$form_state) {
             'title' => t('delete'),
             'href' => 'admin/structure/block/manage/' . $entity_id . '/delete',
           );
+          $links += $entity->getOperationLinks();
           $form['blocks'][$entity_id]['operations'] = array(
             '#type' => 'operations',
             '#links' => $links,
diff --git a/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php b/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php
index 1d3cca8..2827275 100644
--- a/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php
+++ b/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php
@@ -172,4 +172,13 @@ public function preSave(EntityStorageControllerInterface $storage_controller) {
     $this->set('settings', $this->getPlugin()->getConfig());
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getOperationLinks() {
+    $plugin = $this->getPlugin();
+    $links = $plugin->getOperationLinks();
+    return $links;
+  }
+
 }
diff --git a/core/modules/menu/lib/Drupal/menu/Plugin/Block/MenuBlock.php b/core/modules/menu/lib/Drupal/menu/Plugin/Block/MenuBlock.php
index 0e83734..ab6a37a 100644
--- a/core/modules/menu/lib/Drupal/menu/Plugin/Block/MenuBlock.php
+++ b/core/modules/menu/lib/Drupal/menu/Plugin/Block/MenuBlock.php
@@ -31,4 +31,18 @@ public function build() {
     return menu_tree($menu);
   }
 
+  /**
+   * Implements \Drupal\block\BlockInterface::getOperationLinks().
+   */
+  public function getOperationLinks() {
+    $links = array();
+    if (user_access('administer menu')) {
+      list(, $menu) = explode(':', $this->getPluginId(), '2');
+      list(, $menu) = explode('-', $menu, 2);
+      $links['menu-edit']['href'] = 'admin/structure/menu/manage/' . $menu . '/edit';
+      $links['menu-edit']['title'] = t('Edit menu');
+    }
+    return $links;
+  }
+
 }
diff --git a/core/modules/system/lib/Drupal/system/Plugin/Block/SystemMenuBlock.php b/core/modules/system/lib/Drupal/system/Plugin/Block/SystemMenuBlock.php
index 8e7879e..722903c 100644
--- a/core/modules/system/lib/Drupal/system/Plugin/Block/SystemMenuBlock.php
+++ b/core/modules/system/lib/Drupal/system/Plugin/Block/SystemMenuBlock.php
@@ -42,4 +42,18 @@ public function build() {
     return menu_tree($menu);
   }
 
+  /**
+   * Implements \Drupal\block\BlockInterface::getOperationLinks().
+   */
+  public function getOperationLinks() {
+    $links = array();
+    if (user_access('administer menu')) {
+      list(, $menu) = explode(':', $this->getPluginId(), '2');
+      list(, $menu) = explode('-', $menu, 2);
+      $links['menu-edit']['href'] = 'admin/structure/menu/manage/' . $menu . '/edit';
+      $links['menu-edit']['title'] = t('Edit menu');
+    }
+    return $links;
+  }
+
 }
diff --git a/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php b/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php
index c83e5f7..481bd38 100644
--- a/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php
+++ b/core/modules/views_ui/lib/Drupal/views_ui/ViewUI.php
@@ -1209,4 +1209,12 @@ public function mergeDefaultDisplaysOptions() {
   public function uriRelationships() {
     return $this->storage->uriRelationships();
   }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getOperationLinks() {
+    return $this->storage->getOperationLinks();
+  }
+
 }
