diff --git a/core/modules/menu/lib/Drupal/menu/Access/DeleteMenuAccessCheck.php b/core/modules/menu/lib/Drupal/menu/Access/DeleteMenuAccessCheck.php deleted file mode 100644 index e8fb6f2..0000000 --- a/core/modules/menu/lib/Drupal/menu/Access/DeleteMenuAccessCheck.php +++ /dev/null @@ -1,37 +0,0 @@ -attributes->get('menu')) { - // System-defined menus may not be deleted. - $system_menus = menu_list_system_menus(); - return !isset($system_menus[$menu->id()]); - } - return FALSE; - } -} diff --git a/core/modules/menu/lib/Drupal/menu/MenuFormController.php b/core/modules/menu/lib/Drupal/menu/MenuFormController.php index faa9fa3..bedb08b 100644 --- a/core/modules/menu/lib/Drupal/menu/MenuFormController.php +++ b/core/modules/menu/lib/Drupal/menu/MenuFormController.php @@ -156,16 +156,17 @@ public function form(array $form, array &$form_state) { * The name of the menu. * * @return bool - * Returns TRUE if the menu already exists. - * - * @see form_validate_machine_name() + * Returns TRUE if the menu already exists, FALSE otherwise. */ public function menuNameExists($value) { - $custom_exists = $this->entityQueryFactory->get('menu')->condition('id', $value)->range(0, 1)->count()->execute(); - // 'menu-' is added to the menu name to avoid name-space conflicts. - $link_exists = $this->entityQueryFactory->get('menu_link')->condition('menu_name', 'menu-' . $value)->range(0, 1)->count()->execute(); + // Check first to see if a menu with this ID exists. + if ($this->entityQueryFactory->get('menu')->condition('id', $value)->range(0, 1)->count()->execute()) { + return TRUE; + } - return $custom_exists || $link_exists; + // Check for a link assigned to this menu. 'menu-' is added to the menu name + // to avoid name-space conflicts. + return $this->entityQueryFactory->get('menu_link')->condition('menu_name', 'menu-' . $value)->range(0, 1)->count()->execute(); } /** diff --git a/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php b/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php index 696e7b4..1303f43 100644 --- a/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php +++ b/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php @@ -661,6 +661,24 @@ function enableMenuLink($item) { } /** + * Test administrative users other than user 1 can access the menu parents AJAX callback. + */ + public function testMenuParentsJsAccess() { + + $admin = $this->drupalCreateUser(array('administer menu')); + $this->drupalLogin($admin); + // Just check access to the callback overall, the POST data is irrelevant. + $this->drupalGetAJAX('admin/structure/menu/parents'); + $this->assertResponse(200); + + // Do standard user tests. + // Login the user. + $this->drupalLogin($this->std_user); + $this->drupalGetAJAX('admin/structure/menu/parents'); + $this->assertResponse(403); + } + + /** * Get standard menu link. */ private function getStandardMenuLink() { diff --git a/core/modules/menu/menu.module b/core/modules/menu/menu.module index 0a1ee10..9d9e85c 100644 --- a/core/modules/menu/menu.module +++ b/core/modules/menu/menu.module @@ -99,7 +99,6 @@ function menu_menu() { $items['admin/structure/menu/manage/%menu/edit'] = array( 'title' => 'Edit menu', 'type' => MENU_DEFAULT_LOCAL_TASK, - 'weight' => -10, 'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE, ); $items['admin/structure/menu/manage/%menu/delete'] = array( diff --git a/core/modules/menu/menu.routing.yml b/core/modules/menu/menu.routing.yml index 638cdae..d710470 100644 --- a/core/modules/menu/menu.routing.yml +++ b/core/modules/menu/menu.routing.yml @@ -52,18 +52,18 @@ menu_menu_add: defaults: _entity_form: 'menu.add' requirements: - _permission: 'administer menu' + _entity_create_access: 'menu' menu_menu_edit: pattern: '/admin/structure/menu/manage/{menu}' defaults: _entity_form: 'menu.edit' requirements: - _permission: 'administer menu' + _entity_access: 'menu.update' menu_delete_menu: pattern: 'admin/structure/menu/manage/{menu}/delete' defaults: _entity_form: 'menu.delete' requirements: - _access_menu_delete_menu: 'TRUE' + _entity_access: 'menu.delete' diff --git a/core/modules/menu/menu.services.yml b/core/modules/menu/menu.services.yml index f417d6f..f68094f 100644 --- a/core/modules/menu/menu.services.yml +++ b/core/modules/menu/menu.services.yml @@ -3,7 +3,3 @@ services: class: Drupal\menu\Access\DeleteLinkAccessCheck tags: - { name: access_check } - access_check.menu.delete_menu: - class: Drupal\menu\Access\DeleteMenuAccessCheck - tags: - - { name: access_check }