]> source.dussan.org Git - nextcloud-server.git/commitdiff
use unmasked permissions in shared scanner
authorRobin Appelman <robin@icewind.nl>
Wed, 14 Dec 2016 13:35:45 +0000 (14:35 +0100)
committerRobin Appelman <robin@icewind.nl>
Thu, 15 Dec 2016 14:58:49 +0000 (15:58 +0100)
Signed-off-by: Robin Appelman <robin@icewind.nl>
apps/files_sharing/lib/Scanner.php
apps/files_sharing/lib/SharedStorage.php
apps/files_sharing/tests/SharedStorageTest.php

index 86c6b58f439846177add20562b87fe900b8bbaf4..cab04fa93092d76dc1c4cb02670b169bb73348c9 100644 (file)
@@ -31,6 +31,11 @@ use OC\Files\ObjectStore\NoopScanner;
  * Scanner for SharedStorage
  */
 class Scanner extends \OC\Files\Cache\Scanner {
+       /**
+        * @var \OCA\Files_Sharing\SharedStorage $storage
+        */
+       protected $storage;
+
        private $sourceScanner;
 
        /**
@@ -46,8 +51,8 @@ class Scanner extends \OC\Files\Cache\Scanner {
                if ($data === null) {
                        return null;
                }
-               list($sourceStorage, $internalPath) = $this->storage->resolvePath($path);
-               $data['permissions'] = $sourceStorage->getPermissions($internalPath);
+               $internalPath = $this->storage->getSourcePath($path);
+               $data['permissions'] = $this->storage->getSourceStorage()->getPermissions($internalPath);
                return $data;
        }
 
index ad250a790fac003ae5e1b7c90c9f8f7d988b7baa..888cbfda143ce8d7771ea2b854163a655b593f01 100644 (file)
@@ -446,7 +446,8 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
        }
 
        public function getSourceStorage() {
-               return $this->getWrapperStorage();
+               $this->init();
+               return $this->nonMaskedStorage;
        }
 
        public function getWrapperStorage() {
index f1b0cbb8fbb432d2eba2d5d6c21e6f2d6a7f4c1e..eaa138b0f70eaf5b4de7c06beb92863eac4bd4bd 100644 (file)
@@ -531,4 +531,32 @@ class SharedStorageTest extends TestCase {
                $this->shareManager->deleteShare($share1);
                $this->shareManager->deleteShare($share2);
        }
+
+       public function testOwnerPermissions() {
+               self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+
+               $share = $this->share(
+                       \OCP\Share::SHARE_TYPE_USER,
+                       $this->folder,
+                       self::TEST_FILES_SHARING_API_USER1,
+                       self::TEST_FILES_SHARING_API_USER2,
+                       \OCP\Constants::PERMISSION_ALL - \OCP\Constants::PERMISSION_DELETE
+               );
+
+               self::loginHelper(self::TEST_FILES_SHARING_API_USER2);
+               $view = new \OC\Files\View('/' . self::TEST_FILES_SHARING_API_USER2 . '/files');
+               $this->assertTrue($view->file_exists($this->folder));
+
+               $view->file_put_contents($this->folder . '/newfile.txt', 'asd');
+
+               self::loginHelper(self::TEST_FILES_SHARING_API_USER1);
+
+               $this->assertTrue($this->view->file_exists($this->folder . '/newfile.txt'));
+               $this->assertEquals(\OCP\Constants::PERMISSION_ALL - \OCP\Constants::PERMISSION_CREATE,
+                       $this->view->getFileInfo($this->folder . '/newfile.txt')->getPermissions());
+
+               $this->view->unlink($this->folder);
+               $this->shareManager->deleteShare($share);
+
+       }
 }