Blame view
sources/lib/private/files/cache/permissions.php
3.84 KB
|
03e52840d
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?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 {
/**
* @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)
*/
public function get($fileId, $user) {
|
|
31b7f2792
|
36 37 |
$sql = 'SELECT `permissions` FROM `*PREFIX*permissions` WHERE `user` = ? AND `fileid` = ?'; $result = \OC_DB::executeAudited($sql, array($user, $fileId)); |
|
03e52840d
|
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
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
*/
public function set($fileId, $user, $permissions) {
if (self::get($fileId, $user) !== -1) {
|
|
31b7f2792
|
54 |
$sql = 'UPDATE `*PREFIX*permissions` SET `permissions` = ? WHERE `user` = ? AND `fileid` = ?'; |
|
03e52840d
|
55 |
} else {
|
|
31b7f2792
|
56 |
$sql = 'INSERT INTO `*PREFIX*permissions`(`permissions`, `user`, `fileid`) VALUES(?, ?,? )'; |
|
03e52840d
|
57 |
} |
|
31b7f2792
|
58 |
\OC_DB::executeAudited($sql, array($permissions, $user, $fileId)); |
|
03e52840d
|
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
}
/**
* get the permissions of multiply files
*
* @param int[] $fileIds
* @param string $user
* @return int[]
*/
public function getMultiple($fileIds, $user) {
if (count($fileIds) === 0) {
return array();
}
$params = $fileIds;
$params[] = $user;
$inPart = implode(', ', array_fill(0, count($fileIds), '?'));
|
|
31b7f2792
|
75 76 77 |
$sql = 'SELECT `fileid`, `permissions` FROM `*PREFIX*permissions`'
. ' WHERE `fileid` IN (' . $inPart . ') AND `user` = ?';
$result = \OC_DB::executeAudited($sql, $params);
|
|
03e52840d
|
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
$filePermissions = array();
while ($row = $result->fetchRow()) {
$filePermissions[$row['fileid']] = $row['permissions'];
}
return $filePermissions;
}
/**
* get the permissions for all files in a folder
*
* @param int $parentId
* @param string $user
* @return int[]
*/
public function getDirectoryPermissions($parentId, $user) {
|
|
31b7f2792
|
93 94 95 96 |
$sql = 'SELECT `*PREFIX*permissions`.`fileid`, `permissions` FROM `*PREFIX*permissions` INNER JOIN `*PREFIX*filecache` ON `*PREFIX*permissions`.`fileid` = `*PREFIX*filecache`.`fileid` WHERE `*PREFIX*filecache`.`parent` = ? AND `*PREFIX*permissions`.`user` = ?'; |
|
03e52840d
|
97 |
|
|
31b7f2792
|
98 |
$result = \OC_DB::executeAudited($sql, array($parentId, $user)); |
|
03e52840d
|
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
$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
*/
public function remove($fileId, $user = null) {
if (is_null($user)) {
|
|
31b7f2792
|
114 |
\OC_DB::executeAudited('DELETE FROM `*PREFIX*permissions` WHERE `fileid` = ?', array($fileId));
|
|
03e52840d
|
115 |
} else {
|
|
31b7f2792
|
116 117 |
$sql = 'DELETE FROM `*PREFIX*permissions` WHERE `fileid` = ? AND `user` = ?'; \OC_DB::executeAudited($sql, array($fileId, $user)); |
|
03e52840d
|
118 119 120 121 122 123 |
}
}
public function removeMultiple($fileIds, $user) {
$query = \OC_DB::prepare('DELETE FROM `*PREFIX*permissions` WHERE `fileid` = ? AND `user` = ?');
foreach ($fileIds as $fileId) {
|
|
31b7f2792
|
124 |
\OC_DB::executeAudited($query, array($fileId, $user)); |
|
03e52840d
|
125 126 |
} } |
|
31b7f2792
|
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
/**
* get the list of users which have permissions stored for a file
*
* @param int $fileId
*/
public function getUsers($fileId) {
$sql = 'SELECT `user` FROM `*PREFIX*permissions` WHERE `fileid` = ?';
$result = \OC_DB::executeAudited($sql, array($fileId));
$users = array();
while ($row = $result->fetchRow()) {
$users[] = $row['user'];
}
return $users;
}
|
|
03e52840d
|
142 |
} |