Merge pull request #8698 from owncloud/sharing_improve_permissions
get permissions directly from share storage to avoid additional db calls
This commit is contained in:
commit
6764d5b122
3 changed files with 30 additions and 36 deletions
|
@ -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);
|
||||
$permissions = $this->storage->getPermissions();
|
||||
|
||||
$permission = -1;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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') {
|
||||
|
|
14
lib/private/files/cache/permissions.php
vendored
14
lib/private/files/cache/permissions.php
vendored
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue