diff options
author | Bjoern Schiessle <schiessle@owncloud.com> | 2014-05-23 17:15:05 +0200 |
---|---|---|
committer | Bjoern Schiessle <schiessle@owncloud.com> | 2014-06-02 20:17:40 +0200 |
commit | e0a5f3b5707d505833d159652391fb84da88487c (patch) | |
tree | 835ebaa73fd576bcf0dd994ffdbab87ab50b7900 /apps | |
parent | c88c0b9a13231478c626296d78aac7c1f66d87d9 (diff) | |
download | nextcloud-server-e0a5f3b5707d505833d159652391fb84da88487c.tar.gz nextcloud-server-e0a5f3b5707d505833d159652391fb84da88487c.zip |
get permissions directly from share storage to avoid additional db calls
Diffstat (limited to 'apps')
-rw-r--r-- | apps/files_sharing/lib/permissions.php | 44 | ||||
-rw-r--r-- | apps/files_sharing/lib/sharedstorage.php | 2 |
2 files changed, 12 insertions, 34 deletions
diff --git a/apps/files_sharing/lib/permissions.php b/apps/files_sharing/lib/permissions.php index f32ebabe40d..d79d74f1738 100644 --- a/apps/files_sharing/lib/permissions.php +++ b/apps/files_sharing/lib/permissions.php @@ -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; } diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php index a7dd2b3afa1..6d661dfd8af 100644 --- a/apps/files_sharing/lib/sharedstorage.php +++ b/apps/files_sharing/lib/sharedstorage.php @@ -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') { |