diff --git a/core/modules/menu/menu.admin.inc b/core/modules/menu/menu.admin.inc index 1c46f2c..8095a4d 100644 --- a/core/modules/menu/menu.admin.inc +++ b/core/modules/menu/menu.admin.inc @@ -162,31 +162,27 @@ function _menu_overview_tree_form($tree, $delta = 50) { ); // Build a list of operations. $operations = array(); - $links = array(); - $links['edit'] = array( + $operations['edit'] = array( 'title' => t('Edit'), 'href' => 'admin/structure/menu/item/' . $item['mlid'] . '/edit', ); - $operations['edit'] = array('#type' => 'link', '#title' => t('Edit'), '#href' => 'admin/structure/menu/item/' . $item['mlid'] . '/edit'); // Only items created by the menu module can be deleted. if ($item['module'] == 'menu' || $item['updated'] == 1) { - $links['delete'] = array( + $operations['delete'] = array( 'title' => t('Delete'), 'href' => 'admin/structure/menu/item/' . $item['mlid'] . '/delete', ); - $operations['delete'] = array('#type' => 'link', '#title' => t('Delete'), '#href' => 'admin/structure/menu/item/' . $item['mlid'] . '/delete'); } // Set the reset column. elseif ($item['module'] == 'system' && $item['customized']) { - $links['reset'] = array( + $operations['reset'] = array( 'title' => t('Reset'), 'href' => 'admin/structure/menu/item/' . $item['mlid'] . '/reset', ); - $operations['reset'] = array('#type' => 'link', '#title' => t('Reset'), '#href' => 'admin/structure/menu/item/' . $item['mlid'] . '/reset'); } $form[$mlid]['operations'] = array( '#type' => 'operations', - '#links' => $links, + '#links' => $operations, ); } diff --git a/core/modules/menu/menu.routing.yml b/core/modules/menu/menu.routing.yml index 263597c..7d7ac83 100644 --- a/core/modules/menu/menu.routing.yml +++ b/core/modules/menu/menu.routing.yml @@ -10,18 +10,18 @@ menu_link_reset: defaults: _entity_form: 'menu_link.reset' requirements: - _permission: 'administer menu' + _permission: 'menu_link.reset' menu_link_delete: pattern: 'admin/structure/menu/item/{menu_link}/delete' defaults: _entity_form: 'menu_link.delete' requirements: - _entity_access: menu_link.delete + _entity_access: 'menu_link.delete' menu_delete_menu: pattern: 'admin/structure/menu/manage/{menu}/delete' defaults: _entity_form: 'menu.delete' requirements: - _entity_access: menu.delete + _entity_access: 'menu.delete' diff --git a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkAccessController.php b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkAccessController.php index 291d4a3..ba5f43d 100644 --- a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkAccessController.php +++ b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkAccessController.php @@ -23,10 +23,17 @@ class MenuLinkAccessController extends EntityAccessController { */ protected function checkAccess(EntityInterface $entity, $operation, $langcode, AccountInterface $account) { $access = $account->hasPermission('administer menu'); - if ($access && $operation == 'delete') { - // Links defined via hook_menu may not be deleted. Updated items are an - // exception, as they can be broken. - return $entity->module !== 'system' || $entity->updated; + if ($access) { + switch ($operation) { + case 'reset': + // Reset allowed for items defined via hook_menu() and customized. + return $entity->module == 'system' || $entity->customized; + + case 'delete': + // Only items created by the menu module can be deleted. + return $entity->module == 'menu' || $entity->updated; + + } } return $access; }