[BUGFIX] Fix moving/copying files and folders between storages 53/25553/2
authorFrans Saris <franssaris@gmail.com>
Wed, 20 Nov 2013 22:22:21 +0000 (23:22 +0100)
committerMarkus Klein <klein.t3@mfc-linz.at>
Thu, 21 Nov 2013 16:07:08 +0000 (17:07 +0100)
When a file or folder is moved between 2 storages the target
storages is asked for the filepermissions of the source
file/folder. This breaks because current storages + driver
can not access/find source.

This patch makes sure that on places where a source can be
from an other storage the source storage is used for the
permission check.

Releases: 6.0, 6.1, 6.2
Resolves: #53802
Change-Id: Ib2c1443fad295a3b7eeeb01ab38359fcdf6849ab
Reviewed-on: https://review.typo3.org/25553
Reviewed-by: Fabien Udriot
Reviewed-by: Alexander Opitz
Tested-by: Alexander Opitz
Reviewed-by: Markus Klein
Tested-by: Markus Klein
typo3/sysext/core/Classes/Resource/ResourceStorage.php

index 2f6422c..4c2ed77 100644 (file)
@@ -927,7 +927,7 @@ class ResourceStorage {
                        throw new Exception\IllegalFileExtensionException('Extension of file name is not allowed in "' . $targetFileName . '"!', 1378243279);
                }
                // Check if user is allowed to move and $file is readable and writable
-               if (!$this->checkFileActionPermission('move', $file)) {
+               if (!$file->getStorage()->checkFileActionPermission('move', $file)) {
                        throw new Exception\InsufficientUserPermissionsException('You are not allowed to move files to storage "' . $this->getUid() . '"', 1319219349);
                }
                // Check if target folder is writable
@@ -986,7 +986,7 @@ class ResourceStorage {
                        throw new Exception('The operation of the folder cannot be called by this storage "' . $this->getUid() . '"', 1319550405);
                }
                // Check if user is allowed to copy
-               if (!$this->checkFileActionPermission('copy', $file)) {
+               if (!$file->getStorage()->checkFileActionPermission('copy', $file)) {
                        throw new Exception\InsufficientFileReadPermissionsException('You are not allowed to copy the file "' . $file->getIdentifier() . '"', 1319550425);
                }
                // Check if targetFolder is writable
@@ -1023,7 +1023,7 @@ class ResourceStorage {
                        throw new \RuntimeException('The folder "' . $folderToCopy->getIdentifier() . '" to copy is not of type Folder.', 1384209020);
                }
                // Check if user is allowed to copy and the folder is readable
-               if (!$this->checkFolderActionPermission('copy', $folderToCopy)) {
+               if (!$folderToCopy->getStorage()->checkFolderActionPermission('copy', $folderToCopy)) {
                        throw new Exception\InsufficientFileReadPermissionsException('You are not allowed to copy the folder "' . $folderToCopy->getIdentifier() . '"', 1377777629);
                }
                if (!$targetParentFolder instanceof Folder) {
@@ -1061,7 +1061,7 @@ class ResourceStorage {
                // Check if user is allowed to move and the folder is writable
                // In fact we would need to check if the parent folder of the folder to move is writable also
                // But as of now we cannot extract the parent folder from this folder
-               if (!$this->checkFolderActionPermission('move', $folderToMove)) {
+               if (!$folderToMove->getStorage()->checkFolderActionPermission('move', $folderToMove)) {
                        throw new Exception\InsufficientFileReadPermissionsException('You are not allowed to copy the folder "' . $folderToMove->getIdentifier() . '"', 1377778045);
                }
                if (!$targetParentFolder instanceof Folder) {