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