summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2014-06-03 19:13:51 +0200
committerThomas Müller <thomas.mueller@tmit.eu>2014-06-03 19:13:51 +0200
commit6764d5b122fbdf105dc34c2fa3ccb7cf3eae3c6e (patch)
tree12c234a0b92ba59548a369b34bef622a7751950b /apps
parent21d1e5eccc262824b39645ca05c848897f14f2ac (diff)
parent916f85937785f6580f201cdf95fb42f63457af94 (diff)
downloadnextcloud-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.php50
-rw-r--r--apps/files_sharing/lib/sharedstorage.php2
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') {