diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2014-06-03 19:13:51 +0200 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2014-06-03 19:13:51 +0200 |
commit | 6764d5b122fbdf105dc34c2fa3ccb7cf3eae3c6e (patch) | |
tree | 12c234a0b92ba59548a369b34bef622a7751950b /apps | |
parent | 21d1e5eccc262824b39645ca05c848897f14f2ac (diff) | |
parent | 916f85937785f6580f201cdf95fb42f63457af94 (diff) | |
download | nextcloud-server-6764d5b122fbdf105dc34c2fa3ccb7cf3eae3c6e.tar.gz nextcloud-server-6764d5b122fbdf105dc34c2fa3ccb7cf3eae3c6e.zip |
Merge pull request #8698 from owncloud/sharing_improve_permissions
get permissions directly from share storage to avoid additional db calls
Diffstat (limited to 'apps')
-rw-r--r-- | apps/files_sharing/lib/permissions.php | 50 | ||||
-rw-r--r-- | apps/files_sharing/lib/sharedstorage.php | 2 |
2 files changed, 16 insertions, 36 deletions
diff --git a/apps/files_sharing/lib/permissions.php b/apps/files_sharing/lib/permissions.php index f32ebabe40d..2c4dce36332 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; - - if ($source) { - $permission = $this->updatePermissions($source['permissions']); - } + $permissions = $this->storage->getPermissions(); - 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); } /** @@ -84,11 +63,9 @@ class Shared_Permissions extends Permissions { * @return int[] */ public function getMultiple($fileIds, $user) { - if (count($fileIds) === 0) { - return array(); - } + $filePermissions = array(); foreach ($fileIds as $fileId) { - $filePermissions[$fileId] = self::get($fileId, $user); + $filePermissions[$fileId] = $this->get($fileId, $user); } return $filePermissions; } @@ -101,16 +78,19 @@ 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); + + if ($parentId === -1 && $this->storage->instanceOfStorage('\OC\Files\Storage\Shared')) { + $fileCacheId = $this->storage->getSourceId(); + } else { + $fileCacheId = $parentId; } - $permissions = $this->getFile($parentId, $user); + $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') { |