summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/files/cache/permissions.php36
-rw-r--r--lib/files/storage/common.php14
-rw-r--r--lib/files/storage/storage.php5
-rw-r--r--lib/files/view.php6
-rw-r--r--tests/lib/files/cache/permissions.php45
-rw-r--r--tests/lib/files/cache/scanner.php3
-rw-r--r--tests/lib/files/cache/watcher.php3
-rw-r--r--tests/lib/files/view.php3
8 files changed, 76 insertions, 39 deletions
diff --git a/lib/files/cache/permissions.php b/lib/files/cache/permissions.php
index dd7233abc70..d0968337f02 100644
--- a/lib/files/cache/permissions.php
+++ b/lib/files/cache/permissions.php
@@ -10,13 +10,29 @@ namespace OC\Files\Cache;
class Permissions {
/**
+ * @var string $storageId
+ */
+ private $storageId;
+
+ /**
+ * @param \OC\Files\Storage\Storage|string $storage
+ */
+ public function __construct($storage){
+ if($storage instanceof \OC\Files\Storage\Storage){
+ $this->storageId = $storage->getId();
+ }else{
+ $this->storageId = $storage;
+ }
+ }
+
+ /**
* get the permissions for a single file
*
* @param int $fileId
* @param string $user
* @return int (-1 if file no permissions set)
*/
- static public function get($fileId, $user) {
+ public function get($fileId, $user) {
$query = \OC_DB::prepare('SELECT `permissions` FROM `*PREFIX*permissions` WHERE `user` = ? AND `fileid` = ?');
$result = $query->execute(array($user, $fileId));
if ($row = $result->fetchRow()) {
@@ -33,7 +49,7 @@ class Permissions {
* @param string $user
* @param int $permissions
*/
- static public function set($fileId, $user, $permissions) {
+ public function set($fileId, $user, $permissions) {
if (self::get($fileId, $user) !== -1) {
$query = \OC_DB::prepare('UPDATE `*PREFIX*permissions` SET `permissions` = ? WHERE `user` = ? AND `fileid` = ?');
} else {
@@ -49,7 +65,7 @@ class Permissions {
* @param string $user
* @return int[]
*/
- static public function getMultiple($fileIds, $user) {
+ public function getMultiple($fileIds, $user) {
if (count($fileIds) === 0) {
return array();
}
@@ -72,17 +88,15 @@ class Permissions {
* @param int $fileId
* @param string $user
*/
- static public function remove($fileId, $user) {
+ public function remove($fileId, $user) {
$query = \OC_DB::prepare('DELETE FROM `*PREFIX*permissions` WHERE `fileid` = ? AND `user` = ?');
$query->execute(array($fileId, $user));
}
- static public function removeMultiple($fileIds, $user) {
- $params = $fileIds;
- $params[] = $user;
- $inPart = implode(', ', array_fill(0, count($fileIds), '?'));
-
- $query = \OC_DB::prepare('DELETE FROM `*PREFIX*permissions` WHERE `fileid` IN (' . $inPart . ') AND `user` = ?');
- $query->execute($params);
+ public function removeMultiple($fileIds, $user) {
+ $query = \OC_DB::prepare('DELETE FROM `*PREFIX*permissions` WHERE `fileid` = ? AND `user` = ?');
+ foreach($fileIds as $fileId){
+ $query->execute(array($fileId, $user));
+ }
}
}
diff --git a/lib/files/storage/common.php b/lib/files/storage/common.php
index f471752d1ff..cf6fe64a4f2 100644
--- a/lib/files/storage/common.php
+++ b/lib/files/storage/common.php
@@ -57,19 +57,19 @@ abstract class Common implements \OC\Files\Storage\Storage {
public function getPermissions($path){
$permissions = 0;
if($this->isCreatable($path)){
- $permissions |= \OCP\Share::PERMISSION_CREATE;
+ $permissions |= \OCP\PERMISSION_CREATE;
}
if($this->isReadable($path)){
- $permissions |= \OCP\Share::PERMISSION_READ;
+ $permissions |= \OCP\PERMISSION_READ;
}
if($this->isUpdatable($path)){
- $permissions |= \OCP\Share::PERMISSION_UPDATE;
+ $permissions |= \OCP\PERMISSION_UPDATE;
}
if($this->isDeletable($path)){
- $permissions |= \OCP\Share::PERMISSION_DELETE;
+ $permissions |= \OCP\PERMISSION_DELETE;
}
if($this->isSharable($path)){
- $permissions |= \OCP\Share::PERMISSION_SHARE;
+ $permissions |= \OCP\PERMISSION_SHARE;
}
return $permissions;
}
@@ -259,6 +259,10 @@ abstract class Common implements \OC\Files\Storage\Storage {
return new \OC\Files\Cache\Scanner($this);
}
+ public function getPermissionsCache(){
+ return new \OC\Files\Cache\Permissions($this);
+ }
+
/**
* get the owner of a path
* @param string $path The path to get the owner
diff --git a/lib/files/storage/storage.php b/lib/files/storage/storage.php
index bb1ba16984d..73dcb8fe36b 100644
--- a/lib/files/storage/storage.php
+++ b/lib/files/storage/storage.php
@@ -65,6 +65,11 @@ interface Storage{
public function getOwner($path);
/**
+ * @return \OC\Files\Cache\Permissions
+ */
+ public function getPermissionsCache();
+
+ /**
* get the ETag for a file or folder
*
* @param string $path
diff --git a/lib/files/view.php b/lib/files/view.php
index a54c3ee3564..e516a4fed6a 100644
--- a/lib/files/view.php
+++ b/lib/files/view.php
@@ -701,7 +701,8 @@ class View {
}
}
- $data['permissions'] = Cache\Permissions::get($data['fileid'], \OC_User::getUser());
+ $permissionsCache = $storage->getPermissionsCache();
+ $data['permissions'] = $permissionsCache->get($data['fileid'], \OC_User::getUser());
return $data;
}
@@ -759,8 +760,9 @@ class View {
$files[$i]['type'] = $file['mimetype'] === 'httpd/unix-directory' ? 'dir' : 'file';
$ids[] = $file['fileid'];
}
+ $permissionsCache = $storage->getPermissionsCache();
- $permissions = Cache\Permissions::getMultiple($ids, \OC_User::getUser());
+ $permissions = $permissionsCache->getMultiple($ids, \OC_User::getUser());
foreach ($files as $i => $file) {
$files[$i]['permissions'] = $permissions[$file['fileid']];
}
diff --git a/tests/lib/files/cache/permissions.php b/tests/lib/files/cache/permissions.php
index 4d47929a3ee..56dbbc4518e 100644
--- a/tests/lib/files/cache/permissions.php
+++ b/tests/lib/files/cache/permissions.php
@@ -9,39 +9,48 @@
namespace Test\Files\Cache;
class Permissions extends \PHPUnit_Framework_TestCase {
+ /***
+ * @var \OC\Files\Cache\Permissions $permissionsCache
+ */
+ private $permissionsCache;
+
+ function setUp(){
+ $this->permissionsCache=new \OC\Files\Cache\Permissions('dummy');
+ }
+
function testSimple() {
$ids = range(1, 10);
$user = uniqid();
- $this->assertEquals(-1, \OC\Files\Cache\Permissions::get(1, $user));
- \OC\Files\Cache\Permissions::set(1, $user, 1);
- $this->assertEquals(1, \OC\Files\Cache\Permissions::get(1, $user));
- $this->assertEquals(-1, \OC\Files\Cache\Permissions::get(2, $user));
- $this->assertEquals(-1, \OC\Files\Cache\Permissions::get(1, $user . '2'));
+ $this->assertEquals(-1, $this->permissionsCache->get(1, $user));
+ $this->permissionsCache->set(1, $user, 1);
+ $this->assertEquals(1, $this->permissionsCache->get(1, $user));
+ $this->assertEquals(-1, $this->permissionsCache->get(2, $user));
+ $this->assertEquals(-1, $this->permissionsCache->get(1, $user . '2'));
- \OC\Files\Cache\Permissions::set(1, $user, 2);
- $this->assertEquals(2, \OC\Files\Cache\Permissions::get(1, $user));
+ $this->permissionsCache->set(1, $user, 2);
+ $this->assertEquals(2, $this->permissionsCache->get(1, $user));
- \OC\Files\Cache\Permissions::set(2, $user, 1);
- $this->assertEquals(1, \OC\Files\Cache\Permissions::get(2, $user));
+ $this->permissionsCache->set(2, $user, 1);
+ $this->assertEquals(1, $this->permissionsCache->get(2, $user));
- \OC\Files\Cache\Permissions::remove(1, $user);
- $this->assertEquals(-1, \OC\Files\Cache\Permissions::get(1, $user));
- \OC\Files\Cache\Permissions::remove(1, $user . '2');
- $this->assertEquals(1, \OC\Files\Cache\Permissions::get(2, $user));
+ $this->permissionsCache->remove(1, $user);
+ $this->assertEquals(-1, $this->permissionsCache->get(1, $user));
+ $this->permissionsCache->remove(1, $user . '2');
+ $this->assertEquals(1, $this->permissionsCache->get(2, $user));
$expected = array();
foreach ($ids as $id) {
- \OC\Files\Cache\Permissions::set($id, $user, 10 + $id);
+ $this->permissionsCache->set($id, $user, 10 + $id);
$expected[$id] = 10 + $id;
}
- $this->assertEquals($expected, \OC\Files\Cache\Permissions::getMultiple($ids, $user));
+ $this->assertEquals($expected, $this->permissionsCache->getMultiple($ids, $user));
- \OC\Files\Cache\Permissions::removeMultiple(array(10, 9), $user);
+ $this->permissionsCache->removeMultiple(array(10, 9), $user);
unset($expected[9]);
unset($expected[10]);
- $this->assertEquals($expected, \OC\Files\Cache\Permissions::getMultiple($ids, $user));
+ $this->assertEquals($expected, $this->permissionsCache->getMultiple($ids, $user));
- \OC\Files\Cache\Permissions::removeMultiple($ids, $user);
+ $this->permissionsCache->removeMultiple($ids, $user);
}
}
diff --git a/tests/lib/files/cache/scanner.php b/tests/lib/files/cache/scanner.php
index f784a82dada..c53da92727c 100644
--- a/tests/lib/files/cache/scanner.php
+++ b/tests/lib/files/cache/scanner.php
@@ -112,7 +112,8 @@ class Scanner extends \UnitTestCase {
function tearDown() {
$ids = $this->cache->getAll();
- \OC\Files\Cache\Permissions::removeMultiple($ids, \OC_User::getUser());
+ $permissionsCache = $this->storage->getPermissionsCache();
+ $permissionsCache->removeMultiple($ids, \OC_User::getUser());
$this->cache->clear();
}
}
diff --git a/tests/lib/files/cache/watcher.php b/tests/lib/files/cache/watcher.php
index a7076d9b0b5..0125dd843b9 100644
--- a/tests/lib/files/cache/watcher.php
+++ b/tests/lib/files/cache/watcher.php
@@ -23,7 +23,8 @@ class Watcher extends \PHPUnit_Framework_TestCase {
foreach ($this->storages as $storage) {
$cache = $storage->getCache();
$ids = $cache->getAll();
- \OC\Files\Cache\Permissions::removeMultiple($ids, \OC_User::getUser());
+ $permissionsCache = $storage->getPermissionsCache();
+ $permissionsCache->removeMultiple($ids, \OC_User::getUser());
$cache->clear();
}
}
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index fa562cb15cd..a173094b1cc 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -21,7 +21,8 @@ class View extends \PHPUnit_Framework_TestCase {
foreach ($this->storages as $storage) {
$cache = $storage->getCache();
$ids = $cache->getAll();
- \OC\Files\Cache\Permissions::removeMultiple($ids, \OC_User::getUser());
+ $permissionsCache = $storage->getPermissionsCache();
+ $permissionsCache->removeMultiple($ids, \OC_User::getUser());
$cache->clear();
}
}