diff --git a/core/modules/menu/lib/Drupal/menu/Access/DeleteLinkAccessCheck.php b/core/modules/menu/lib/Drupal/menu/Access/DeleteLinkAccessCheck.php deleted file mode 100644 index f4438e7..0000000 --- a/core/modules/menu/lib/Drupal/menu/Access/DeleteLinkAccessCheck.php +++ /dev/null @@ -1,37 +0,0 @@ -getRequirements()); - } - - /** - * {@inheritdoc} - */ - public function access(Route $route, Request $request) { - if (user_access('administer menu') && $menu_link = $request->attributes->get('menu_link')) { - // Links defined via hook_menu may not be deleted. Updated items are an - // exception, as they can be broken. - return $menu_link->module !== 'system' || $menu_link->updated; - } - return FALSE; - } -} 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 ef00dd0..0000000 --- a/core/modules/menu/lib/Drupal/menu/Access/DeleteMenuAccessCheck.php +++ /dev/null @@ -1,37 +0,0 @@ -getRequirements()); - } - - /** - * {@inheritdoc} - */ - public function access(Route $route, Request $request) { - if (user_access('administer menu') && $menu = $request->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/MenuAccessController.php b/core/modules/menu/lib/Drupal/menu/MenuAccessController.php new file mode 100644 index 0000000..056a2d9 --- /dev/null +++ b/core/modules/menu/lib/Drupal/menu/MenuAccessController.php @@ -0,0 +1,34 @@ +id()]); + } + return user_access('administer menu', $account); + } + +} diff --git a/core/modules/menu/lib/Drupal/menu/MenuFormController.php b/core/modules/menu/lib/Drupal/menu/MenuFormController.php index 4eeab27..ad1003f 100644 --- a/core/modules/menu/lib/Drupal/menu/MenuFormController.php +++ b/core/modules/menu/lib/Drupal/menu/MenuFormController.php @@ -71,10 +71,8 @@ public function form(array $form, array &$form_state) { */ protected function actions(array $form, array &$form_state) { $actions = parent::actions($form, $form_state); - $menu = $this->entity; - $system_menus = menu_list_system_menus(); - $actions['delete']['#access'] = !$menu->isNew() && !isset($system_menus[$menu->id()]); + $actions['delete']['#access'] = !$this->entity->isNew() && $this->entity->access('delete'); return $actions; } @@ -114,8 +112,7 @@ public function save(array $form, array &$form_state) { * Overrides Drupal\Core\Entity\EntityFormController::delete(). */ public function delete(array $form, array &$form_state) { - $menu = $this->entity; - $form_state['redirect'] = 'admin/structure/menu/manage/' . $menu->id() . '/delete'; + $form_state['redirect'] = 'admin/structure/menu/manage/' . $this->entity->id() . '/delete'; } } diff --git a/core/modules/menu/lib/Drupal/menu/MenuListController.php b/core/modules/menu/lib/Drupal/menu/MenuListController.php index e557d92..2fc753f 100644 --- a/core/modules/menu/lib/Drupal/menu/MenuListController.php +++ b/core/modules/menu/lib/Drupal/menu/MenuListController.php @@ -55,13 +55,11 @@ public function getOperations(EntityInterface $entity) { 'options' => $uri['options'], 'weight' => 20, ); - // System menus could not be deleted. - $system_menus = menu_list_system_menus(); - if (isset($system_menus[$entity->id()])) { - unset($operations['delete']); + if ($entity->access('delete')) { + $operations['delete']['title'] = t('Delete menu'); } else { - $operations['delete']['title'] = t('Delete menu'); + unset($operations['delete']); } return $operations; } diff --git a/core/modules/menu/menu.admin.inc b/core/modules/menu/menu.admin.inc index 4150b99..892ad18 100644 --- a/core/modules/menu/menu.admin.inc +++ b/core/modules/menu/menu.admin.inc @@ -125,7 +125,6 @@ function menu_overview_form($form, &$form_state) { function _menu_overview_tree_form($tree, $delta = 50) { $form = &drupal_static(__FUNCTION__, array('#tree' => TRUE)); foreach ($tree as $data) { - $title = ''; $item = $data['link']; // Don't show callbacks; these have $item['hidden'] < 0. if ($item && $item['hidden'] >= 0) { diff --git a/core/modules/menu/menu.routing.yml b/core/modules/menu/menu.routing.yml index aafe5c3..7b651b5 100644 --- a/core/modules/menu/menu.routing.yml +++ b/core/modules/menu/menu.routing.yml @@ -17,11 +17,11 @@ menu_link_delete: defaults: _form: '\Drupal\menu\Form\MenuLinkDeleteForm' requirements: - _access_menu_delete_link: 'TRUE' + _entity_access: menu_link.delete menu_delete_menu: pattern: 'admin/structure/menu/manage/{menu}/delete' defaults: _form: '\Drupal\menu\Form\MenuDeleteMenuForm' 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 deleted file mode 100644 index f417d6f..0000000 --- a/core/modules/menu/menu.services.yml +++ /dev/null @@ -1,9 +0,0 @@ -services: - access_check.menu.delete_link: - class: Drupal\menu\Access\DeleteLinkAccessCheck - tags: - - { name: access_check } - access_check.menu.delete_menu: - class: Drupal\menu\Access\DeleteMenuAccessCheck - tags: - - { name: access_check } diff --git a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkAccessController.php b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkAccessController.php new file mode 100644 index 0000000..15d02eb --- /dev/null +++ b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkAccessController.php @@ -0,0 +1,33 @@ +module == 'menu'; + } + return $access; + } + +} diff --git a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php index 9aa76d4..200b73b 100644 --- a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php +++ b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php @@ -172,7 +172,7 @@ public function form(array $form, array &$form_state) { protected function actions(array $form, array &$form_state) { $element = parent::actions($form, $form_state); $element['submit']['#button_type'] = 'primary'; - $element['delete']['#access'] = $this->entity->module == 'menu'; + $element['delete']['#access'] = $this->entity->access('delete'); return $element; } diff --git a/core/modules/menu_link/lib/Drupal/menu_link/Plugin/Core/Entity/MenuLink.php b/core/modules/menu_link/lib/Drupal/menu_link/Plugin/Core/Entity/MenuLink.php index 5af23d7..7e7c5cf 100644 --- a/core/modules/menu_link/lib/Drupal/menu_link/Plugin/Core/Entity/MenuLink.php +++ b/core/modules/menu_link/lib/Drupal/menu_link/Plugin/Core/Entity/MenuLink.php @@ -24,6 +24,7 @@ * module = "menu_link", * controllers = { * "storage" = "Drupal\menu_link\MenuLinkStorageController", + * "access" = "Drupal\menu_link\MenuLinkAccessController", * "render" = "Drupal\Core\Entity\EntityRenderController", * "form" = { * "default" = "Drupal\menu_link\MenuLinkFormController"