diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/UserRoleUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/UserRoleUpgradePathTest.php index 670420a2b7d..a58da9d02b8 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Upgrade/UserRoleUpgradePathTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/UserRoleUpgradePathTest.php @@ -39,8 +39,10 @@ class UserRoleUpgradePathTest extends UpgradePathTestBase { // Check that "gärtner" has been converted to "4" and that the role // edit page for it exists. - $this->drupalGet('admin/people/roles/edit/4'); + $this->drupalGet('admin/people/roles/manage/4'); $this->assertResponse(200, 'Role edit page for "gärtner" was found.'); + $this->assertField('label', 'Role edit page for "gärtner" was found.'); + $this->assertRaw('gärtner', 'Role edit page for "gärtner" was found.'); // Check that the anonymous user role ID has been converted from "1" to // "anonymous". diff --git a/core/modules/user/lib/Drupal/user/Form/UserRoleDelete.php b/core/modules/user/lib/Drupal/user/Form/UserRoleDelete.php new file mode 100644 index 00000000000..2108b92c409 --- /dev/null +++ b/core/modules/user/lib/Drupal/user/Form/UserRoleDelete.php @@ -0,0 +1,73 @@ + $this->role->label())); + } + + /** + * {@inheritdoc} + */ + protected function getCancelPath() { + return 'admin/people/roles'; + } + + /** + * {@inheritdoc} + */ + protected function getConfirmText() { + return t('Delete'); + } + + /** + * {@inheritdoc} + * @param \Drupal\user\RoleInterface $user_role + * The role being deleted. + */ + public function buildForm(array $form, array &$form_state, RoleInterface $user_role = NULL) { + $this->role = $user_role; + return parent::buildForm($form, $form_state); + } + + /** + * {@inheritdoc} + */ + public function submitForm(array &$form, array &$form_state) { + $this->role->delete(); + watchdog('user', 'Role %name has been deleted.', array('%name' => $this->role->label())); + drupal_set_message(t('Role %name has been deleted.', array('%name' => $this->role->label()))); + $form_state['redirect'] = 'admin/people/roles'; + } + +} diff --git a/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/Role.php b/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/Role.php index 62cc7d36875..5a288c821be 100644 --- a/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/Role.php +++ b/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/Role.php @@ -21,6 +21,7 @@ use Drupal\user\RoleInterface; * module = "user", * controllers = { * "storage" = "Drupal\user\RoleStorageController", + * "access" = "Drupal\user\RoleAccessController", * "list" = "Drupal\user\RoleListController", * "form" = { * "default" = "Drupal\user\RoleFormController" diff --git a/core/modules/user/lib/Drupal/user/RoleAccessController.php b/core/modules/user/lib/Drupal/user/RoleAccessController.php new file mode 100644 index 00000000000..3fe010074cf --- /dev/null +++ b/core/modules/user/lib/Drupal/user/RoleAccessController.php @@ -0,0 +1,34 @@ +id() == DRUPAL_ANONYMOUS_RID || $entity->id() == DRUPAL_AUTHENTICATED_RID) { + return FALSE; + } + + default: + return user_access('administer permissions', $account); + } + } + +} diff --git a/core/modules/user/user.admin.inc b/core/modules/user/user.admin.inc index 49986ba9938..9946ae24028 100644 --- a/core/modules/user/user.admin.inc +++ b/core/modules/user/user.admin.inc @@ -481,28 +481,3 @@ function user_admin_role_add() { $role = entity_create('user_role', array()); return entity_get_form($role); } - -/** - * Form to confirm role delete operation. - */ -function user_admin_role_delete_confirm($form, &$form_state, $role) { - $form_state['user_role'] = $role; - $form['id'] = array( - '#type' => 'value', - '#value' => $role->id(), - ); - return confirm_form($form, t('Are you sure you want to delete the role %name ?', array('%name' => $role->label())), 'admin/people/roles', t('This action cannot be undone.'), t('Delete')); -} - -/** - * Form submit handler for user_admin_role_delete_confirm(). - */ -function user_admin_role_delete_confirm_submit($form, &$form_state) { - $role = $form_state['user_role']; - $role->delete(); - - drupal_set_message(t('Role %label has been deleted.', array('%label' => $role->label()))); - watchdog('user', 'Role %label has been deleted.', array('%label' => $role->label()), WATCHDOG_NOTICE); - - $form_state['redirect'] = 'admin/people/roles'; -} diff --git a/core/modules/user/user.module b/core/modules/user/user.module index 67c31188d85..322311f100e 100644 --- a/core/modules/user/user.module +++ b/core/modules/user/user.module @@ -945,24 +945,18 @@ function user_menu() { $items['admin/people/roles'] = array( 'title' => 'Roles', 'description' => 'List, edit, or add user roles.', - 'page callback' => 'user_admin_roles_list', - 'access arguments' => array('administer permissions'), - 'file' => 'user.admin.inc', + 'route_name' => 'user_role_list', 'type' => MENU_LOCAL_TASK, ); $items['admin/people/roles/add'] = array( 'title' => 'Add role', - 'page callback' => 'user_admin_role_add', - 'access arguments' => array('administer permissions'), + 'route_name' => 'user_role_add', 'type' => MENU_LOCAL_ACTION, - 'file' => 'user.admin.inc', ); $items['admin/people/roles/manage/%user_role'] = array( 'title' => 'Edit role', - 'page callback' => 'entity_get_form', - 'page arguments' => array(4), - 'access arguments' => array('administer permissions'), + 'route_name' => 'user_role_edit', ); $items['admin/people/roles/manage/%user_role/edit'] = array( 'title' => 'Edit', @@ -970,13 +964,9 @@ function user_menu() { ); $items['admin/people/roles/manage/%user_role/delete'] = array( 'title' => 'Delete role', - 'page callback' => 'drupal_get_form', - 'page arguments' => array('user_admin_role_delete_confirm', 4), - 'access callback' => 'user_role_delete_access', - 'access arguments' => array(4), + 'route_name' => 'user_role_delete', 'weight' => 10, 'context' => MENU_CONTEXT_INLINE, - 'file' => 'user.admin.inc', ); $items['admin/people/create'] = array( @@ -1885,18 +1875,6 @@ function user_role_load($rid) { return entity_load('user_role', $rid); } -/** - * Menu access callback for user role deletion. - */ -function user_role_delete_access($role) { - // Prevent the system-defined roles from being removed. - if ($role->id() == DRUPAL_ANONYMOUS_RID || $role->id() == DRUPAL_AUTHENTICATED_RID) { - return FALSE; - } - - return user_access('administer permissions'); -} - /** * Determine the modules that permissions belong to. * diff --git a/core/modules/user/user.routing.yml b/core/modules/user/user.routing.yml index 0798e1ddb98..409b033e728 100644 --- a/core/modules/user/user.routing.yml +++ b/core/modules/user/user.routing.yml @@ -25,3 +25,32 @@ user_account_settings: _form: '\Drupal\user\AccountSettingsForm' requirements: _permission: 'administer users' + +user_role_list: + pattern: '/admin/people/roles' + defaults: + _content: '\Drupal\Core\Entity\Controller\EntityListController::listing' + entity_type: 'user_role' + requirements: + _permission: 'administer permissions' + +user_role_add: + pattern: '/admin/people/roles/add' + defaults: + _entity_form: user_role.default + requirements: + _permission: 'administer permissions' + +user_role_edit: + pattern: '/admin/people/roles/manage/{user_role}' + defaults: + _entity_form: user_role.default + requirements: + _entity_access: user_role.update + +user_role_delete: + pattern: '/admin/people/roles/manage/{user_role}/delete' + defaults: + _form: '\Drupal\user\Form\UserRoleDelete' + requirements: + _entity_access: user_role.delete