Issue #2892821 by tedbow, zaporylie, alexpott, Wim Leers, dagmar, yoroy, effulgentsia, Bojhan: Core modules check node module's "access content" permission for displaying things that have nothing to do with nodes
parent
1e850835d9
commit
a8e7de393b
|
|
@ -12,8 +12,6 @@ administer nodes:
|
||||||
restrict access: true
|
restrict access: true
|
||||||
access content overview:
|
access content overview:
|
||||||
title: 'Access the Content overview page'
|
title: 'Access the Content overview page'
|
||||||
access content:
|
|
||||||
title: 'View published content'
|
|
||||||
view own unpublished content:
|
view own unpublished content:
|
||||||
title: 'View own unpublished content'
|
title: 'View own unpublished content'
|
||||||
view all revisions:
|
view all revisions:
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,10 @@ access site in maintenance mode:
|
||||||
view the administration theme:
|
view the administration theme:
|
||||||
title: 'View the administration theme'
|
title: 'View the administration theme'
|
||||||
description: 'This is only used when the site is configured to use a separate administration theme on the Appearance page.'
|
description: 'This is only used when the site is configured to use a separate administration theme on the Appearance page.'
|
||||||
|
# Note that the 'access content' permission is moved to the Node section of the
|
||||||
|
# permission form when the Node module is enabled.
|
||||||
|
access content:
|
||||||
|
title: 'View published content'
|
||||||
access site reports:
|
access site reports:
|
||||||
title: 'View site reports'
|
title: 'View site reports'
|
||||||
restrict access: true
|
restrict access: true
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Drupal\Tests\system\Kernel;
|
||||||
|
|
||||||
|
use Drupal\KernelTests\KernelTestBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @group system
|
||||||
|
*/
|
||||||
|
class PermissionsTest extends KernelTestBase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public static $modules = [
|
||||||
|
'system',
|
||||||
|
'user',
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the 'access content' permission is provided by the System module.
|
||||||
|
*/
|
||||||
|
public function testAccessContentPermission() {
|
||||||
|
// Uninstalling modules requires the users_data table to exist.
|
||||||
|
$this->installSchema('user', ['users_data']);
|
||||||
|
|
||||||
|
$permissions = $this->container->get('user.permissions')->getPermissions();
|
||||||
|
$this->assertSame('system', $permissions['access content']['provider']);
|
||||||
|
|
||||||
|
// Install the 'node' module, assert that it is now the 'node' module
|
||||||
|
// providing the 'access content' permission.
|
||||||
|
$this->container->get('module_installer')->install(['node']);
|
||||||
|
|
||||||
|
$permissions = $this->container->get('user.permissions')->getPermissions();
|
||||||
|
$this->assertSame('system', $permissions['access content']['provider']);
|
||||||
|
|
||||||
|
// Uninstall the 'node' module, assert that it is again the 'system' module.
|
||||||
|
$this->container->get('module_installer')->uninstall(['node']);
|
||||||
|
|
||||||
|
$permissions = $this->container->get('user.permissions')->getPermissions();
|
||||||
|
$this->assertSame('system', $permissions['access content']['provider']);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -129,6 +129,21 @@ class UserPermissionsForm extends FormBase {
|
||||||
$permissions_by_provider[$permission['provider']][$permission_name] = $permission;
|
$permissions_by_provider[$permission['provider']][$permission_name] = $permission;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Move the access content permission to the Node module if it is installed.
|
||||||
|
if ($this->moduleHandler->moduleExists('node')) {
|
||||||
|
// Insert 'access content' before the 'view own unpublished content' key
|
||||||
|
// in order to maintain the UI even though the permission is provided by
|
||||||
|
// the system module.
|
||||||
|
$keys = array_keys($permissions_by_provider['node']);
|
||||||
|
$offset = (int) array_search('view own unpublished content', $keys);
|
||||||
|
$permissions_by_provider['node'] = array_merge(
|
||||||
|
array_slice($permissions_by_provider['node'], 0, $offset),
|
||||||
|
['access content' => $permissions_by_provider['system']['access content']],
|
||||||
|
array_slice($permissions_by_provider['node'], $offset)
|
||||||
|
);
|
||||||
|
unset($permissions_by_provider['system']['access content']);
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($permissions_by_provider as $provider => $permissions) {
|
foreach ($permissions_by_provider as $provider => $permissions) {
|
||||||
// Module name.
|
// Module name.
|
||||||
$form['permissions'][$provider] = [
|
$form['permissions'][$provider] = [
|
||||||
|
|
|
||||||
|
|
@ -164,4 +164,24 @@ class UserPermissionsTest extends WebTestBase {
|
||||||
$this->assertNotEqual($previous_permissions_hash, $current_permissions_hash, 'Permissions hash has changed.');
|
$this->assertNotEqual($previous_permissions_hash, $current_permissions_hash, 'Permissions hash has changed.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify 'access content' is listed in the correct location.
|
||||||
|
*/
|
||||||
|
public function testAccessContentPermission() {
|
||||||
|
$this->drupalLogin($this->adminUser);
|
||||||
|
|
||||||
|
// When Node is not installed the 'access content' permission is listed next
|
||||||
|
// to 'access site reports'.
|
||||||
|
$this->drupalGet('admin/people/permissions');
|
||||||
|
$next_row = $this->xpath('//tr[@data-drupal-selector=\'edit-permissions-access-content\']/following-sibling::tr[1]');
|
||||||
|
$this->assertEqual('edit-permissions-access-site-reports', $next_row[0]->attributes()['data-drupal-selector']);
|
||||||
|
|
||||||
|
// When Node is installed the 'access content' permission is listed next to
|
||||||
|
// to 'view own unpublished content'.
|
||||||
|
\Drupal::service('module_installer')->install(['node']);
|
||||||
|
$this->drupalGet('admin/people/permissions');
|
||||||
|
$next_row = $this->xpath('//tr[@data-drupal-selector=\'edit-permissions-access-content\']/following-sibling::tr[1]');
|
||||||
|
$this->assertEqual('edit-permissions-view-own-unpublished-content', $next_row[0]->attributes()['data-drupal-selector']);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue