diff --git a/core/modules/user/src/Form/UserPermissionsForm.php b/core/modules/user/src/Form/UserPermissionsForm.php index 0428925fa03228888d87c77c1b70a31bda8f1384..95409cbe227d2049e4279f955580e70e41918725 100644 --- a/core/modules/user/src/Form/UserPermissionsForm.php +++ b/core/modules/user/src/Form/UserPermissionsForm.php @@ -86,7 +86,7 @@ public function getFormId() { * An array of role objects. */ protected function getRoles() { - return $this->roleStorage->loadMultiple(); + return $this->roleStorage->loadMultipleOverrideFree(); } /** diff --git a/core/modules/user/tests/modules/user_config_override_test/src/ConfigOverrider.php b/core/modules/user/tests/modules/user_config_override_test/src/ConfigOverrider.php new file mode 100644 index 0000000000000000000000000000000000000000..c5ba5ad89eaf4973ce0ae97b87fedc7013bf6a8a --- /dev/null +++ b/core/modules/user/tests/modules/user_config_override_test/src/ConfigOverrider.php @@ -0,0 +1,49 @@ +<?php + +declare(strict_types=1); + +namespace Drupal\user_config_override_test; + +use Drupal\Core\Config\StorableConfigBase; +use Drupal\Core\Cache\CacheableMetadata; +use Drupal\Core\Config\ConfigFactoryOverrideInterface; +use Drupal\Core\Config\StorageInterface; + +/** + * Tests overridden permissions. + */ +class ConfigOverrider implements ConfigFactoryOverrideInterface { + + /** + * {@inheritdoc} + */ + public function loadOverrides($names): array { + return [ + 'user.role.anonymous' => [ + 'permissions' => [9999 => 'access content'], + ], + ]; + } + + /** + * {@inheritdoc} + */ + public function getCacheSuffix(): string { + return 'user_config_override_test'; + } + + /** + * {@inheritdoc} + */ + public function getCacheableMetadata($name): CacheableMetadata { + return new CacheableMetadata(); + } + + /** + * {@inheritdoc} + */ + public function createConfigObject($name, $collection = StorageInterface::DEFAULT_COLLECTION): StorableConfigBase|null { + return NULL; + } + +} diff --git a/core/modules/user/tests/modules/user_config_override_test/user_config_override_test.info.yml b/core/modules/user/tests/modules/user_config_override_test/user_config_override_test.info.yml new file mode 100644 index 0000000000000000000000000000000000000000..2ccb5cfb2672dc44ad34e4fcfed65f9360852f9d --- /dev/null +++ b/core/modules/user/tests/modules/user_config_override_test/user_config_override_test.info.yml @@ -0,0 +1,4 @@ +name: 'Permission config overrider' +type: module +package: Testing +version: VERSION diff --git a/core/modules/user/tests/modules/user_config_override_test/user_config_override_test.services.yml b/core/modules/user/tests/modules/user_config_override_test/user_config_override_test.services.yml new file mode 100644 index 0000000000000000000000000000000000000000..3ed295dd8000be5e3bcbf547eaf3cc89224c922a --- /dev/null +++ b/core/modules/user/tests/modules/user_config_override_test/user_config_override_test.services.yml @@ -0,0 +1,5 @@ +services: + user_config_override_test.overrider: + class: Drupal\user_config_override_test\ConfigOverrider + tags: + - { name: config.factory.override } diff --git a/core/modules/user/tests/src/Functional/UserPermissionsTest.php b/core/modules/user/tests/src/Functional/UserPermissionsTest.php index b9faf636318647628aeb41af1f24f8e31d926d97..456ec90675485f8dffff7ea3253ebc5cef8c57f0 100644 --- a/core/modules/user/tests/src/Functional/UserPermissionsTest.php +++ b/core/modules/user/tests/src/Functional/UserPermissionsTest.php @@ -37,6 +37,13 @@ class UserPermissionsTest extends BrowserTestBase { */ protected $defaultTheme = 'stark'; + /** + * {@inheritdoc} + */ + protected static $modules = [ + 'user_config_override_test', + ]; + /** * {@inheritdoc} */ @@ -333,4 +340,16 @@ public function testBundlePermissionError(): void { $assert_session->pageTextNotContains("Entity view display 'node.article.default': Component"); } + /** + * Verify that the permission form does not use overridden config. + * + * @see \Drupal\user_config_override_test\ConfigOverrider + */ + public function testOverriddenPermission(): void { + $this->drupalLogin($this->adminUser); + + $this->drupalGet('admin/people/permissions'); + $this->assertSession()->checkboxNotChecked('anonymous[access content]'); + } + }