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 45560dc..0000000 --- a/core/modules/menu/lib/Drupal/menu/Access/DeleteLinkAccessCheck.php +++ /dev/null @@ -1,37 +0,0 @@ -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 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/MenuAccessController.php b/core/modules/menu/lib/Drupal/menu/MenuAccessController.php index b7128c0..48ef135 100644 --- a/core/modules/menu/lib/Drupal/menu/MenuAccessController.php +++ b/core/modules/menu/lib/Drupal/menu/MenuAccessController.php @@ -32,7 +32,7 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A } if (in_array($operation, array('update', 'delete'))) { - return user_access('administer menu', $account); + return $account->hasPermission('administer menu'); } } @@ -40,7 +40,7 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A * {@inheritdoc} */ protected function checkCreateAccess(AccountInterface $account, array $context, $entity_bundle = NULL) { - return user_access('administer menu', $account); + return $account->hasPermission('administer menu'); } } diff --git a/core/modules/menu/lib/Drupal/menu/MenuFormController.php b/core/modules/menu/lib/Drupal/menu/MenuFormController.php index a709d2e..bfb395b 100644 --- a/core/modules/menu/lib/Drupal/menu/MenuFormController.php +++ b/core/modules/menu/lib/Drupal/menu/MenuFormController.php @@ -97,10 +97,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'); // Add the language configuration submit handler. This is needed because the // submit button has custom submit handlers. @@ -171,8 +169,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 139c40b..567f8c2 100644 --- a/core/modules/menu/lib/Drupal/menu/MenuListController.php +++ b/core/modules/menu/lib/Drupal/menu/MenuListController.php @@ -51,7 +51,12 @@ public function getOperations(EntityInterface $entity) { $operations['edit']['title'] = t('Edit menu'); } if (isset($operations['delete'])) { - $operations['delete']['title'] = t('Delete menu'); + if ($entity->access('delete')) { + $operations['delete']['title'] = t('Delete menu'); + } + else { + unset($operations['delete']); + } } $operations['add'] = array( 'title' => t('Add link'), diff --git a/core/modules/menu/menu.admin.inc b/core/modules/menu/menu.admin.inc index 7346712..1c46f2c 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 62c54f2..263597c 100644 --- a/core/modules/menu/menu.routing.yml +++ b/core/modules/menu/menu.routing.yml @@ -17,11 +17,11 @@ menu_link_delete: defaults: _entity_form: 'menu_link.delete' requirements: - _access_menu_delete_link: 'TRUE' + _entity_access: menu_link.delete 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 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..291d4a3 --- /dev/null +++ b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkAccessController.php @@ -0,0 +1,34 @@ +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; + } + 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 8eb4458..9d58de9 100644 --- a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php +++ b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php @@ -208,7 +208,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 7f227f8..f8a6e5f 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 @@ -28,6 +28,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" diff --git a/core/modules/system/lib/Drupal/system/MenuAccessController.php b/core/modules/system/lib/Drupal/system/MenuAccessController.php new file mode 100644 index 0000000..d955d95 --- /dev/null +++ b/core/modules/system/lib/Drupal/system/MenuAccessController.php @@ -0,0 +1,34 @@ +id()]); + } + return user_access('administer menu', $account); + } + +} diff --git a/core/modules/system/lib/Drupal/system/Plugin/Core/Entity/Menu.php b/core/modules/system/lib/Drupal/system/Plugin/Core/Entity/Menu.php index f12e2a6..ef690c2 100644 --- a/core/modules/system/lib/Drupal/system/Plugin/Core/Entity/Menu.php +++ b/core/modules/system/lib/Drupal/system/Plugin/Core/Entity/Menu.php @@ -20,7 +20,8 @@ * label = @Translation("Menu"), * module = "system", * controllers = { - * "storage" = "Drupal\Core\Config\Entity\ConfigStorageController" + * "storage" = "Drupal\Core\Config\Entity\ConfigStorageController", + * "access" = "Drupal\system\MenuAccessController" * }, * config_prefix = "menu.menu", * entity_keys = {