</table> | </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> | <table> | ||||
<name>*dbprefix*group_user</name> | <name>*dbprefix*group_user</name> |
<?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); | |||||
} | |||||
} |
*/ | */ | ||||
public static function getVersion() { | 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 | // 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); | |||||
} | } | ||||
/** | /** |
<?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); | |||||
} | |||||
} |