diff --git a/typo3/sysext/core/Classes/DataHandling/PagePermissionAssembler.php b/typo3/sysext/core/Classes/DataHandling/PagePermissionAssembler.php
index 24f0c7738d255ac69cfde82b5a763ee5cdf03dc8..75a3c4af4aed40db2f07e1cec0819bc543df45f1 100644
--- a/typo3/sysext/core/Classes/DataHandling/PagePermissionAssembler.php
+++ b/typo3/sysext/core/Classes/DataHandling/PagePermissionAssembler.php
@@ -91,20 +91,39 @@ class PagePermissionAssembler
      */
     protected function setTSconfigPermissions(array $fieldArray, array $tsconfig): array
     {
-        if ((string)($tsconfig['userid'] ?? '') !== '') {
-            $fieldArray['perms_userid'] = (int)$tsconfig['userid'];
+        $parentPermissions = [];
+        if (in_array('copyFromParent', $tsconfig, true)) {
+            $parentPermissions = BackendUtility::getRecordWSOL('pages', $fieldArray['pid'], 'uid,perms_userid,perms_groupid,perms_user,perms_group,perms_everybody') ?? [];
         }
-        if ((string)($tsconfig['groupid'] ?? '') !== '') {
-            $fieldArray['perms_groupid'] = (int)$tsconfig['groupid'];
+        if (
+            (string)($tsconfig['userid'] ?? '') !== ''
+            && ($tsconfig['userid'] !== 'copyFromParent' || isset($parentPermissions['perms_userid']))
+        ) {
+            $fieldArray['perms_userid'] = $tsconfig['userid'] === 'copyFromParent' ? (int)$parentPermissions['perms_userid'] : (int)$tsconfig['userid'];
         }
-        if ((string)($tsconfig['user'] ?? '') !== '') {
-            $fieldArray['perms_user'] = $this->assemblePermissions($tsconfig['user']);
+        if (
+            (string)($tsconfig['groupid'] ?? '') !== ''
+            && ($tsconfig['groupid'] !== 'copyFromParent' || isset($parentPermissions['perms_groupid']))
+        ) {
+            $fieldArray['perms_groupid'] = $tsconfig['groupid'] === 'copyFromParent' ? (int)$parentPermissions['perms_groupid'] : (int)$tsconfig['groupid'];
         }
-        if ((string)($tsconfig['group'] ?? '') !== '') {
-            $fieldArray['perms_group'] = $this->assemblePermissions($tsconfig['group']);
+        if (
+            (string)($tsconfig['user'] ?? '') !== ''
+            && ($tsconfig['user'] !== 'copyFromParent' || isset($parentPermissions['perms_user']))
+        ) {
+            $fieldArray['perms_user'] = $tsconfig['user'] === 'copyFromParent' ? (int)$parentPermissions['perms_user'] : $this->assemblePermissions($tsconfig['user']);
         }
-        if ((string)($tsconfig['everybody'] ?? '') !== '') {
-            $fieldArray['perms_everybody'] = $this->assemblePermissions($tsconfig['everybody']);
+        if (
+            (string)($tsconfig['group'] ?? '') !== ''
+            && ($tsconfig['group'] !== 'copyFromParent' || isset($parentPermissions['perms_group']))
+        ) {
+            $fieldArray['perms_group'] = $tsconfig['group'] === 'copyFromParent' ? (int)$parentPermissions['perms_group'] : $this->assemblePermissions($tsconfig['group']);
+        }
+        if (
+            (string)($tsconfig['everybody'] ?? '') !== ''
+            && ($tsconfig['everybody'] !== 'copyFromParent' || isset($parentPermissions['perms_everybody']))
+        ) {
+            $fieldArray['perms_everybody'] = $tsconfig['everybody'] === 'copyFromParent' ? (int)$parentPermissions['perms_everybody'] : $this->assemblePermissions($tsconfig['everybody']);
         }
         return $fieldArray;
     }
diff --git a/typo3/sysext/core/Documentation/Changelog/12.0/Feature-89917-InheritPageAccess.rst b/typo3/sysext/core/Documentation/Changelog/12.0/Feature-89917-InheritPageAccess.rst
new file mode 100644
index 0000000000000000000000000000000000000000..1c2730310897fcb9f4e41c07da8ed27e01c00683
--- /dev/null
+++ b/typo3/sysext/core/Documentation/Changelog/12.0/Feature-89917-InheritPageAccess.rst
@@ -0,0 +1,28 @@
+.. include:: ../../Includes.txt
+
+=======================================================
+Feature: #89738 - Copy page access settings from parent
+=======================================================
+
+See :issue:`89738`
+
+Description
+===========
+
+It is now possible to copy page access permissions from the parent page,
+while creating new pages. This is possible, using :typoscript:`copyFromParent`
+as value for one of the page TSconfig :typoscript:`TCEMAIN.permissions.*`
+subkeys.
+
+Example
+=======
+
+.. code-block:: typoscript
+
+   TCEMAIN.permissions.userid = copyFromParent
+   TCEMAIN.permissions.groupid = copyFromParent
+   TCEMAIN.permissions.user = copyFromParent
+   TCEMAIN.permissions.group = copyFromParent
+   TCEMAIN.permissions.everybody = copyFromParent
+
+.. index:: Backend, ext:core
diff --git a/typo3/sysext/core/Tests/Functional/DataHandling/Regular/PagePermissionTest.php b/typo3/sysext/core/Tests/Functional/DataHandling/Regular/PagePermissionTest.php
index 81e0bc62b48c6b5c4effe7e80e17e24048beec64..9fa1783d4985b5d9255a8c4552c2b4b1a2328629 100644
--- a/typo3/sysext/core/Tests/Functional/DataHandling/Regular/PagePermissionTest.php
+++ b/typo3/sysext/core/Tests/Functional/DataHandling/Regular/PagePermissionTest.php
@@ -89,14 +89,50 @@ TCEMAIN.permissions.everybody = show,delete
     }
 
     /**
-     * @return array
+     * @test
      */
-    protected function insertPage(): array
+    public function newPageReceivesOverriddenPageTsPermissionSetFromParent()
     {
-        // pid 88 comes from ImportDefault
-        $result = $this->actionService->createNewRecord('pages', 88, [
+        $this->backendUser->user['uid'] = 13;
+        $this->backendUser->firstMainGroup = 14;
+        $GLOBALS['TYPO3_CONF_VARS']['BE']['defaultPermissions'] = [
+            'user' => 'show,editcontent,edit,delete',
+            'group' => 'show,editcontent,new',
+            'everybody' => 'show',
+        ];
+        $GLOBALS['TYPO3_CONF_VARS']['BE']['defaultPageTSconfig'] = '
+TCEMAIN.permissions.userid = 12
+TCEMAIN.permissions.groupid = 42
+TCEMAIN.permissions.user = show,edit
+TCEMAIN.permissions.group = show,delete
+TCEMAIN.permissions.everybody = show,delete
+';
+        $parent = $this->insertPage(88, [
             'title' => 'Test page',
+            'TSconfig' => '
+TCEMAIN.permissions.userid = copyFromParent
+TCEMAIN.permissions.groupid = copyFromParent
+TCEMAIN.permissions.user = copyFromParent
+TCEMAIN.permissions.group = copyFromParent
+TCEMAIN.permissions.everybody = copyFromParent
+            ',
         ]);
+
+        $record = $this->insertPage((int)$parent['uid']);
+        self::assertEquals(12, $record['perms_userid']);
+        self::assertEquals(42, $record['perms_groupid']);
+        self::assertEquals(Permission::PAGE_SHOW + Permission::PAGE_EDIT, $record['perms_user']);
+        self::assertEquals(Permission::PAGE_SHOW + Permission::PAGE_DELETE, $record['perms_group']);
+        self::assertEquals(Permission::PAGE_SHOW + Permission::PAGE_DELETE, $record['perms_everybody']);
+    }
+
+    /**
+     * @return array
+     */
+    protected function insertPage(int $pageId = 88, array $fields = ['title' => 'Test page'])
+    {
+        // pid 88 comes from ImportDefault
+        $result = $this->actionService->createNewRecord('pages', $pageId, $fields);
         $recordUid = $result['pages'][0];
         return BackendUtility::getRecord('pages', $recordUid);
     }