diff --git a/core/modules/system/system.routing.yml b/core/modules/system/system.routing.yml index e0f497860e56f7dea4d4a14dd82694f27bd215e8..6a9c2087420afe77d4e3b0a0e06c6a8463be93a0 100644 --- a/core/modules/system/system.routing.yml +++ b/core/modules/system/system.routing.yml @@ -220,7 +220,7 @@ system.site_maintenance_mode: _form: '\Drupal\system\Form\SiteMaintenanceModeForm' _title: 'Maintenance mode' requirements: - _permission: 'administer site configuration' + _permission: 'administer site configuration+administer software updates' system.run_cron: path: '/admin/reports/status/run-cron' diff --git a/core/modules/system/tests/src/Functional/UpdateSystem/UpdateScriptTest.php b/core/modules/system/tests/src/Functional/UpdateSystem/UpdateScriptTest.php index 5cb492dfb34bbff7d4743588fc9470697329a6a0..827a9c8fc4f43c2dcb8aea0c8de90cc4ee425cab 100644 --- a/core/modules/system/tests/src/Functional/UpdateSystem/UpdateScriptTest.php +++ b/core/modules/system/tests/src/Functional/UpdateSystem/UpdateScriptTest.php @@ -659,17 +659,26 @@ public function testSuccessfulMultilingualUpdateFunctionality() { * Tests maintenance mode link on update.php. */ public function testMaintenanceModeLink() { - $admin_user = $this->drupalCreateUser([ + $full_admin_user = $this->drupalCreateUser([ 'administer software updates', 'access administration pages', 'administer site configuration', ]); - $this->drupalLogin($admin_user); + $this->drupalLogin($full_admin_user); + $this->drupalGet($this->updateUrl, ['external' => TRUE]); + $this->assertSession()->statusCodeEquals(200); + $this->clickLink('maintenance mode'); + $this->assertSession()->statusCodeEquals(200); + $this->assertSession()->elementContains('css', 'main h1', 'Maintenance mode'); + + // Now login as a user with only 'administer software updates' (but not + // 'administer site configuration') permission and try again. + $this->drupalLogin($this->updateUser); $this->drupalGet($this->updateUrl, ['external' => TRUE]); $this->assertSession()->statusCodeEquals(200); $this->clickLink('maintenance mode'); $this->assertSession()->statusCodeEquals(200); - $this->assertEquals('Maintenance mode', $this->cssSelect('main h1')[0]->getText()); + $this->assertSession()->elementContains('css', 'main h1', 'Maintenance mode'); } /**