annotate core/modules/user/src/Tests/UserPermissionsTest.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\user\Tests;
Chris@0 4
Chris@0 5 use Drupal\simpletest\WebTestBase;
Chris@0 6 use Drupal\user\RoleInterface;
Chris@0 7 use Drupal\user\Entity\Role;
Chris@0 8
Chris@0 9 /**
Chris@0 10 * Verify that role permissions can be added and removed via the permissions
Chris@0 11 * page.
Chris@0 12 *
Chris@0 13 * @group user
Chris@0 14 */
Chris@0 15 class UserPermissionsTest extends WebTestBase {
Chris@0 16
Chris@0 17 /**
Chris@0 18 * User with admin privileges.
Chris@0 19 *
Chris@0 20 * @var \Drupal\user\UserInterface
Chris@0 21 */
Chris@0 22 protected $adminUser;
Chris@0 23
Chris@0 24 /**
Chris@0 25 * User's role ID.
Chris@0 26 *
Chris@0 27 * @var string
Chris@0 28 */
Chris@0 29 protected $rid;
Chris@0 30
Chris@0 31 protected function setUp() {
Chris@0 32 parent::setUp();
Chris@0 33
Chris@0 34 $this->adminUser = $this->drupalCreateUser(['administer permissions', 'access user profiles', 'administer site configuration', 'administer modules', 'administer account settings']);
Chris@0 35
Chris@0 36 // Find the new role ID.
Chris@0 37 $all_rids = $this->adminUser->getRoles();
Chris@0 38 unset($all_rids[array_search(RoleInterface::AUTHENTICATED_ID, $all_rids)]);
Chris@0 39 $this->rid = reset($all_rids);
Chris@0 40 }
Chris@0 41
Chris@0 42 /**
Chris@0 43 * Test changing user permissions through the permissions page.
Chris@0 44 */
Chris@0 45 public function testUserPermissionChanges() {
Chris@0 46 $permissions_hash_generator = $this->container->get('user_permissions_hash_generator');
Chris@0 47
Chris@0 48 $storage = $this->container->get('entity.manager')->getStorage('user_role');
Chris@0 49
Chris@0 50 // Create an additional role and mark it as admin role.
Chris@0 51 Role::create(['is_admin' => TRUE, 'id' => 'administrator', 'label' => 'Administrator'])->save();
Chris@0 52 $storage->resetCache();
Chris@0 53
Chris@0 54 $this->drupalLogin($this->adminUser);
Chris@0 55 $rid = $this->rid;
Chris@0 56 $account = $this->adminUser;
Chris@0 57 $previous_permissions_hash = $permissions_hash_generator->generate($account);
Chris@0 58 $this->assertIdentical($previous_permissions_hash, $permissions_hash_generator->generate($this->loggedInUser));
Chris@0 59
Chris@0 60 // Add a permission.
Chris@0 61 $this->assertFalse($account->hasPermission('administer users'), 'User does not have "administer users" permission.');
Chris@0 62 $edit = [];
Chris@0 63 $edit[$rid . '[administer users]'] = TRUE;
Chris@0 64 $this->drupalPostForm('admin/people/permissions', $edit, t('Save permissions'));
Chris@0 65 $this->assertText(t('The changes have been saved.'), 'Successful save message displayed.');
Chris@0 66 $storage->resetCache();
Chris@0 67 $this->assertTrue($account->hasPermission('administer users'), 'User now has "administer users" permission.');
Chris@0 68 $current_permissions_hash = $permissions_hash_generator->generate($account);
Chris@0 69 $this->assertIdentical($current_permissions_hash, $permissions_hash_generator->generate($this->loggedInUser));
Chris@0 70 $this->assertNotEqual($previous_permissions_hash, $current_permissions_hash, 'Permissions hash has changed.');
Chris@0 71 $previous_permissions_hash = $current_permissions_hash;
Chris@0 72
Chris@0 73 // Remove a permission.
Chris@0 74 $this->assertTrue($account->hasPermission('access user profiles'), 'User has "access user profiles" permission.');
Chris@0 75 $edit = [];
Chris@0 76 $edit[$rid . '[access user profiles]'] = FALSE;
Chris@0 77 $this->drupalPostForm('admin/people/permissions', $edit, t('Save permissions'));
Chris@0 78 $this->assertText(t('The changes have been saved.'), 'Successful save message displayed.');
Chris@0 79 $storage->resetCache();
Chris@0 80 $this->assertFalse($account->hasPermission('access user profiles'), 'User no longer has "access user profiles" permission.');
Chris@0 81 $current_permissions_hash = $permissions_hash_generator->generate($account);
Chris@0 82 $this->assertIdentical($current_permissions_hash, $permissions_hash_generator->generate($this->loggedInUser));
Chris@0 83 $this->assertNotEqual($previous_permissions_hash, $current_permissions_hash, 'Permissions hash has changed.');
Chris@0 84
Chris@0 85 // Ensure that the admin role doesn't have any checkboxes.
Chris@0 86 $this->drupalGet('admin/people/permissions');
Chris@0 87 foreach (array_keys($this->container->get('user.permissions')->getPermissions()) as $permission) {
Chris@0 88 $this->assertNoFieldByName('administrator[' . $permission . ']');
Chris@0 89 }
Chris@0 90 }
Chris@0 91
Chris@0 92 /**
Chris@0 93 * Test assigning of permissions for the administrator role.
Chris@0 94 */
Chris@0 95 public function testAdministratorRole() {
Chris@0 96 $this->drupalLogin($this->adminUser);
Chris@0 97 $this->drupalGet('admin/config/people/accounts');
Chris@0 98
Chris@0 99 // Verify that the administration role is none by default.
Chris@0 100 $this->assertOptionSelected('edit-user-admin-role', '', 'Administration role defaults to none.');
Chris@0 101
Chris@0 102 $this->assertFalse(Role::load($this->rid)->isAdmin());
Chris@0 103
Chris@0 104 // Set the user's role to be the administrator role.
Chris@0 105 $edit = [];
Chris@0 106 $edit['user_admin_role'] = $this->rid;
Chris@0 107 $this->drupalPostForm('admin/config/people/accounts', $edit, t('Save configuration'));
Chris@0 108
Chris@0 109 \Drupal::entityManager()->getStorage('user_role')->resetCache();
Chris@0 110 $this->assertTrue(Role::load($this->rid)->isAdmin());
Chris@0 111
Chris@0 112 // Enable aggregator module and ensure the 'administer news feeds'
Chris@0 113 // permission is assigned by default.
Chris@0 114 \Drupal::service('module_installer')->install(['aggregator']);
Chris@0 115
Chris@0 116 $this->assertTrue($this->adminUser->hasPermission('administer news feeds'), 'The permission was automatically assigned to the administrator role');
Chris@0 117
Chris@0 118 // Ensure that selecting '- None -' removes the admin role.
Chris@0 119 $edit = [];
Chris@0 120 $edit['user_admin_role'] = '';
Chris@0 121 $this->drupalPostForm('admin/config/people/accounts', $edit, t('Save configuration'));
Chris@0 122
Chris@0 123 \Drupal::entityManager()->getStorage('user_role')->resetCache();
Chris@0 124 \Drupal::configFactory()->reset();
Chris@0 125 $this->assertFalse(Role::load($this->rid)->isAdmin());
Chris@0 126
Chris@0 127 // Manually create two admin roles, in that case the single select should be
Chris@0 128 // hidden.
Chris@0 129 Role::create(['id' => 'admin_role_0', 'is_admin' => TRUE, 'label' => 'Admin role 0'])->save();
Chris@0 130 Role::create(['id' => 'admin_role_1', 'is_admin' => TRUE, 'label' => 'Admin role 1'])->save();
Chris@0 131 $this->drupalGet('admin/config/people/accounts');
Chris@0 132 $this->assertNoFieldByName('user_admin_role');
Chris@0 133 }
Chris@0 134
Chris@0 135 /**
Chris@0 136 * Verify proper permission changes by user_role_change_permissions().
Chris@0 137 */
Chris@0 138 public function testUserRoleChangePermissions() {
Chris@0 139 $permissions_hash_generator = $this->container->get('user_permissions_hash_generator');
Chris@0 140
Chris@0 141 $rid = $this->rid;
Chris@0 142 $account = $this->adminUser;
Chris@0 143 $previous_permissions_hash = $permissions_hash_generator->generate($account);
Chris@0 144
Chris@0 145 // Verify current permissions.
Chris@0 146 $this->assertFalse($account->hasPermission('administer users'), 'User does not have "administer users" permission.');
Chris@0 147 $this->assertTrue($account->hasPermission('access user profiles'), 'User has "access user profiles" permission.');
Chris@0 148 $this->assertTrue($account->hasPermission('administer site configuration'), 'User has "administer site configuration" permission.');
Chris@0 149
Chris@0 150 // Change permissions.
Chris@0 151 $permissions = [
Chris@0 152 'administer users' => 1,
Chris@0 153 'access user profiles' => 0,
Chris@0 154 ];
Chris@0 155 user_role_change_permissions($rid, $permissions);
Chris@0 156
Chris@0 157 // Verify proper permission changes.
Chris@0 158 $this->assertTrue($account->hasPermission('administer users'), 'User now has "administer users" permission.');
Chris@0 159 $this->assertFalse($account->hasPermission('access user profiles'), 'User no longer has "access user profiles" permission.');
Chris@0 160 $this->assertTrue($account->hasPermission('administer site configuration'), 'User still has "administer site configuration" permission.');
Chris@0 161
Chris@0 162 // Verify the permissions hash has changed.
Chris@0 163 $current_permissions_hash = $permissions_hash_generator->generate($account);
Chris@0 164 $this->assertNotEqual($previous_permissions_hash, $current_permissions_hash, 'Permissions hash has changed.');
Chris@0 165 }
Chris@0 166
Chris@0 167 }