]> source.dussan.org Git - nextcloud-server.git/commitdiff
get permissions directly from share storage to avoid additional db calls
authorBjoern Schiessle <schiessle@owncloud.com>
Fri, 23 May 2014 15:15:05 +0000 (17:15 +0200)
committerBjoern Schiessle <schiessle@owncloud.com>
Mon, 2 Jun 2014 18:17:40 +0000 (20:17 +0200)
apps/files_sharing/lib/permissions.php
apps/files_sharing/lib/sharedstorage.php
lib/private/files/cache/permissions.php

index f32ebabe40d4763821d0824be65b11d0cd045b99..d79d74f1738747a9c09bfeb6c9bed05563aabe2e 100644 (file)
@@ -27,25 +27,13 @@ class Shared_Permissions extends Permissions {
         *
         * @param int $fileId
         * @param string $user
-        * @return int (-1 if file no permissions set)
+        * @return int permissions
         */
        public function get($fileId, $user) {
 
-               if ($fileId == -1) {
-                       // if we ask for the mount point return -1 so that we can get the correct
-                       // permissions by the path, with the root fileId we have no idea which share is meant
-                       return -1;
-               }
-               $source = \OCP\Share::getItemSharedWithBySource('file', $fileId, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE,
-                       null, true);
-
-               $permission = -1;
+               $permissions = $this->storage->getPermissions();
 
-               if ($source) {
-                       $permission = $this->updatePermissions($source['permissions']);
-               }
-
-               return $permission;
+               return $this->updatePermissions($permissions);
        }
 
        /**
@@ -53,16 +41,7 @@ class Shared_Permissions extends Permissions {
         * @param string $user
         */
        private function getFile($fileId, $user) {
-               if ($fileId == -1) {
-                       return \OCP\PERMISSION_READ;
-               }
-               $source = \OCP\Share::getItemSharedWithBySource('file', $fileId, \OC_Share_Backend_File::FORMAT_SHARED_STORAGE,
-                       null, false);
-               if ($source) {
-                       return $this->updatePermissions($source['permissions']);
-               } else {
-                       return -1;
-               }
+               return $this->get($fileId, $user);
        }
 
        /**
@@ -88,7 +67,7 @@ class Shared_Permissions extends Permissions {
                        return array();
                }
                foreach ($fileIds as $fileId) {
-                       $filePermissions[$fileId] = self::get($fileId, $user);
+                       $filePermissions[$fileId] = $this->get($fileId, $user);
                }
                return $filePermissions;
        }
@@ -101,16 +80,15 @@ class Shared_Permissions extends Permissions {
         * @return int[]
         */
        public function getDirectoryPermissions($parentId, $user) {
-               // Root of the Shared folder
-               if ($parentId === -1) {
-                       return \OCP\Share::getItemsSharedWith('file', \OC_Share_Backend_File::FORMAT_PERMISSIONS);
-               }
-               $permissions = $this->getFile($parentId, $user);
+
+               $fileCacheId = ($parentId === -1) ? $this->storage->getSourceId() : $parentId;
+
                $query = \OC_DB::prepare('SELECT `fileid` FROM `*PREFIX*filecache` WHERE `parent` = ?');
-               $result = $query->execute(array($parentId));
+               $result = $query->execute(array($fileCacheId));
+               $permissions = $this->get($parentId, $user);
                $filePermissions = array();
                while ($row = $result->fetchRow()) {
-                       $filePermissions[$row['fileid']] = $this->updatePermissions($permissions);
+                       $filePermissions[$row['fileid']] = $permissions;
                }
                return $filePermissions;
        }
index a7dd2b3afa1df6c78a03c484b0d9130a7d0db60c..6d661dfd8af284a038cff5cf0e32d0887e146dbc 100644 (file)
@@ -102,7 +102,7 @@ class Shared extends \OC\Files\Storage\Common {
         * @param string $target Shared target file path
         * @return int CRUDS permissions granted
         */
-       public function getPermissions($target) {
+       public function getPermissions($target = '') {
                $permissions = $this->share['permissions'];
                // part file are always have delete permissions
                if (pathinfo($target, PATHINFO_EXTENSION) === 'part') {
index eba18af386318119cdee5cab63e12c33e56e1e3d..a2a614ca0b1268cbc0051281d2799e8706bfe552 100644 (file)
@@ -14,15 +14,29 @@ class Permissions {
         */
        private $storageId;
 
+       /**
+        * @var \OC\Files\Storage\Storage $storage
+        */
+       protected $storage;
+
        /**
         * @param \OC\Files\Storage\Storage|string $storage
         */
        public function __construct($storage) {
                if ($storage instanceof \OC\Files\Storage\Storage) {
                        $this->storageId = $storage->getId();
+                       $this->storage = $storage;
                } else {
                        $this->storageId = $storage;
+                       $mountManager = \OC\Files\Filesystem::getMountManager();
+                       $mount = $mountManager->findByStorageId($this->storageId);
+                       $firstMountPoint = reset($mount);
+                       if ($firstMountPoint instanceof \OC\Files\Storage\Storage) {
+                               $storage = $firstMountPoint->getStorage();
+                               $this->storage = $storage;
+                       }
                }
+
        }
 
        /**