add file permissions cache
This commit is contained in:
parent
ad5957207d
commit
c22a723785
|
@ -175,6 +175,53 @@
|
|||
|
||||
</table>
|
||||
|
||||
<table>
|
||||
|
||||
<name>*dbprefix*permissions</name>
|
||||
|
||||
<declaration>
|
||||
|
||||
<field>
|
||||
<name>fileid</name>
|
||||
<type>integer</type>
|
||||
<default>0</default>
|
||||
<notnull>true</notnull>
|
||||
<length>4</length>
|
||||
</field>
|
||||
|
||||
<field>
|
||||
<name>user</name>
|
||||
<type>text</type>
|
||||
<default></default>
|
||||
<notnull>true</notnull>
|
||||
<length>64</length>
|
||||
</field>
|
||||
|
||||
<field>
|
||||
<name>permissions</name>
|
||||
<type>integer</type>
|
||||
<default>0</default>
|
||||
<notnull>true</notnull>
|
||||
<length>4</length>
|
||||
</field>
|
||||
|
||||
<index>
|
||||
<name>id_user_index</name>
|
||||
<unique>true</unique>
|
||||
<field>
|
||||
<name>fileid</name>
|
||||
<sorting>ascending</sorting>
|
||||
</field>
|
||||
<field>
|
||||
<name>user</name>
|
||||
<sorting>ascending</sorting>
|
||||
</field>
|
||||
</index>
|
||||
|
||||
</declaration>
|
||||
|
||||
</table>
|
||||
|
||||
<table>
|
||||
|
||||
<name>*dbprefix*group_user</name>
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
namespace OC\Files\Cache;
|
||||
|
||||
class Permissions {
|
||||
/**
|
||||
* 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) {
|
||||
$query = \OC_DB::prepare('SELECT `permissions` FROM `*PREFIX*permissions` WHERE `user` = ? AND `fileid` = ?');
|
||||
$result = $query->execute(array($user, $fileId));
|
||||
if ($row = $result->fetchRow()) {
|
||||
return $row['permissions'];
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* set the permissions of a file
|
||||
*
|
||||
* @param int $fileId
|
||||
* @param string $user
|
||||
* @param int $permissions
|
||||
*/
|
||||
static 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 {
|
||||
$query = \OC_DB::prepare('INSERT INTO `*PREFIX*permissions`(`permissions`, `user`, `fileid`) VALUES(?, ?,? )');
|
||||
}
|
||||
$query->execute(array($permissions, $user, $fileId));
|
||||
}
|
||||
|
||||
/**
|
||||
* get the permissions of multiply files
|
||||
*
|
||||
* @param int[] $fileIds
|
||||
* @param string $user
|
||||
* @return int[]
|
||||
*/
|
||||
static public function getMultiple($fileIds, $user) {
|
||||
$params = $fileIds;
|
||||
$params[] = $user;
|
||||
$inPart = implode(', ', array_fill(0, count($fileIds), '?'));
|
||||
|
||||
$query = \OC_DB::prepare('SELECT `fileid`, `permissions` FROM `*PREFIX*permissions` WHERE `fileid` IN (' . $inPart . ') AND `user` = ?');
|
||||
$result = $query->execute($params);
|
||||
$filePermissions = array();
|
||||
while ($row = $result->fetchRow()) {
|
||||
$filePermissions[$row['fileid']] = $row['permissions'];
|
||||
}
|
||||
return $filePermissions;
|
||||
}
|
||||
|
||||
/**
|
||||
* remove the permissions for a file
|
||||
*
|
||||
* @param int $fileId
|
||||
* @param string $user
|
||||
*/
|
||||
static 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);
|
||||
}
|
||||
}
|
|
@ -86,7 +86,7 @@ class OC_Util {
|
|||
*/
|
||||
public static function getVersion() {
|
||||
// hint: We only can count up. So the internal version number of ownCloud 4.5 will be 4.90.0. This is not visible to the user
|
||||
return array(4,91,00);
|
||||
return array(4,91,01);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
namespace Test\Files\Cache;
|
||||
|
||||
class Permissions extends \PHPUnit_Framework_TestCase {
|
||||
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'));
|
||||
|
||||
\OC\Files\Cache\Permissions::set(1, $user, 2);
|
||||
$this->assertEquals(2, \OC\Files\Cache\Permissions::get(1, $user));
|
||||
|
||||
\OC\Files\Cache\Permissions::set(2, $user, 1);
|
||||
$this->assertEquals(1, \OC\Files\Cache\Permissions::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));
|
||||
|
||||
$expected = array();
|
||||
foreach ($ids as $id) {
|
||||
\OC\Files\Cache\Permissions::set($id, $user, 10 + $id);
|
||||
$expected[$id] = 10 + $id;
|
||||
}
|
||||
$this->assertEquals($expected, \OC\Files\Cache\Permissions::getMultiple($ids, $user));
|
||||
|
||||
\OC\Files\Cache\Permissions::removeMultiple(array(10, 9), $user);
|
||||
unset($expected[9]);
|
||||
unset($expected[10]);
|
||||
$this->assertEquals($expected, \OC\Files\Cache\Permissions::getMultiple($ids, $user));
|
||||
|
||||
\OC\Files\Cache\Permissions::removeMultiple($ids, $user);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue