diff --git a/core/modules/user/tests/src/FunctionalJavascript/UserPermissionsTest.php b/core/modules/user/tests/src/FunctionalJavascript/UserPermissionsTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..cdf593e6fb3aecf2d6dc7a4506072604ee538b9e
--- /dev/null
+++ b/core/modules/user/tests/src/FunctionalJavascript/UserPermissionsTest.php
@@ -0,0 +1,79 @@
+<?php
+
+namespace Drupal\Tests\user\FunctionalJavascript;
+
+use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
+use Drupal\user\RoleInterface;
+
+/**
+ * Tests the JS components added to the user permissions page.
+ *
+ * @group user
+ */
+class UserPermissionsTest extends WebDriverTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
+  /**
+   * User with admin privileges.
+   *
+   * @var \Drupal\user\UserInterface
+   */
+  protected $adminUser;
+
+  /**
+   * User's role ID.
+   *
+   * @var string
+   */
+  protected $rid;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp(): void {
+    parent::setUp();
+
+    $this->adminUser = $this->drupalCreateUser([
+      'administer permissions',
+    ]);
+
+    // Find the new role ID.
+    $all_rids = $this->adminUser->getRoles();
+    unset($all_rids[array_search(RoleInterface::AUTHENTICATED_ID, $all_rids)]);
+    $this->rid = reset($all_rids);
+  }
+
+  /**
+   * Tests the dummy checkboxes added to the permissions page.
+   */
+  public function testPermissionCheckboxes() {
+    $this->drupalLogin($this->adminUser);
+    $this->drupalGet('admin/people/permissions');
+
+    $page = $this->getSession()->getPage();
+    $wrapper = $page->find('css', '.form-item-' . $this->rid . '-administer-modules');
+    $real_checkbox = $wrapper->find('css', '.real-checkbox');
+    $dummy_checkbox = $wrapper->find('css', '.dummy-checkbox');
+
+    // The real per-role checkbox is visible and unchecked, the dummy copy is
+    // invisible.
+    $this->assertTrue($real_checkbox->isVisible());
+    $this->assertFalse($real_checkbox->isChecked());
+    $this->assertFalse($dummy_checkbox->isVisible());
+
+    // Enable the permission for all authenticated users.
+    $page->findField('authenticated[administer modules]')->click();
+
+    // The real and dummy checkboxes switch visibility and the dummy is now both
+    // checked and disabled.
+    $this->assertFalse($real_checkbox->isVisible());
+    $this->assertTrue($dummy_checkbox->isVisible());
+    $this->assertTrue($dummy_checkbox->isChecked());
+    $this->assertTrue($dummy_checkbox->hasAttribute('disabled'));
+  }
+
+}
diff --git a/core/modules/user/user.libraries.yml b/core/modules/user/user.libraries.yml
index 0aecebe91648b911cabbb80b58c5a40c7209f9b6..2832a9213463d2c5b8ce99466abfc1f2ccc75ec3 100644
--- a/core/modules/user/user.libraries.yml
+++ b/core/modules/user/user.libraries.yml
@@ -27,6 +27,7 @@ drupal.user.permissions:
     - core/drupal
     - core/drupalSettings
     - user/drupal.user.admin
+    - core/drupal.checkbox
 
 drupal.user.icons:
   version: VERSION