[BUGFIX] Only show inline field if allowed
[Packages/TYPO3.CMS.git] / typo3 / sysext / backend / Classes / Form / FormDataProvider / TcaInline.php
index 3bc75fa..126c552 100644 (file)
@@ -41,7 +41,7 @@ class TcaInline extends AbstractDatabaseRecordProvider implements FormDataProvid
         $result = $this->addInlineFirstPid($result);
 
         foreach ($result['processedTca']['columns'] as $fieldName => $fieldConfig) {
-            if (empty($fieldConfig['config']['type']) || $fieldConfig['config']['type'] !== 'inline') {
+            if (!$this->isInlineField($fieldConfig) || !$this->isUserAllowedToModify($fieldConfig)) {
                 continue;
             }
             $result['processedTca']['columns'][$fieldName]['children'] = [];
@@ -54,6 +54,28 @@ class TcaInline extends AbstractDatabaseRecordProvider implements FormDataProvid
         return $result;
     }
 
+    /**
+     * Is column of type "inline"
+     *
+     * @param array $fieldConfig
+     * @return bool
+     */
+    protected function isInlineField($fieldConfig)
+    {
+        return !empty($fieldConfig['config']['type']) && $fieldConfig['config']['type'] === 'inline';
+    }
+
+    /**
+     * Is user allowed to modify child elements
+     *
+     * @param array $fieldConfig
+     * @return bool
+     */
+    protected function isUserAllowedToModify($fieldConfig)
+    {
+        return $this->getBackendUser()->check('tables_modify', $fieldConfig['config']['foreign_table']);
+    }
+
     /**
      * The "entry" pid for inline records. Nested inline records can potentially hang around on different
      * pid's, but the entry pid is needed for AJAX calls, so that they would know where the action takes place on the page structure.