@@ -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); | |||
} | |||
} |