Blame view

sources/lib/private/files/cache/permissions.php 3.84 KB
03e52840d   Kload   Init
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   Kload   Upgrade to ownclo...
36
37
  		$sql = 'SELECT `permissions` FROM `*PREFIX*permissions` WHERE `user` = ? AND `fileid` = ?';
  		$result = \OC_DB::executeAudited($sql, array($user, $fileId));
03e52840d   Kload   Init
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   Kload   Upgrade to ownclo...
54
  			$sql = 'UPDATE `*PREFIX*permissions` SET `permissions` = ? WHERE `user` = ? AND `fileid` = ?';
03e52840d   Kload   Init
55
  		} else {
31b7f2792   Kload   Upgrade to ownclo...
56
  			$sql = 'INSERT INTO `*PREFIX*permissions`(`permissions`, `user`, `fileid`) VALUES(?, ?,? )';
03e52840d   Kload   Init
57
  		}
31b7f2792   Kload   Upgrade to ownclo...
58
  		\OC_DB::executeAudited($sql, array($permissions, $user, $fileId));
03e52840d   Kload   Init
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   Kload   Upgrade to ownclo...
75
76
77
  		$sql = 'SELECT `fileid`, `permissions` FROM `*PREFIX*permissions`'
  			. ' WHERE `fileid` IN (' . $inPart . ') AND `user` = ?';
  		$result = \OC_DB::executeAudited($sql, $params);
03e52840d   Kload   Init
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   Kload   Upgrade to ownclo...
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   Kload   Init
97

31b7f2792   Kload   Upgrade to ownclo...
98
  		$result = \OC_DB::executeAudited($sql, array($parentId, $user));
03e52840d   Kload   Init
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   Kload   Upgrade to ownclo...
114
  			\OC_DB::executeAudited('DELETE FROM `*PREFIX*permissions` WHERE `fileid` = ?', array($fileId));
03e52840d   Kload   Init
115
  		} else {
31b7f2792   Kload   Upgrade to ownclo...
116
117
  			$sql = 'DELETE FROM `*PREFIX*permissions` WHERE `fileid` = ? AND `user` = ?';
  			\OC_DB::executeAudited($sql, array($fileId, $user));
03e52840d   Kload   Init
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   Kload   Upgrade to ownclo...
124
  			\OC_DB::executeAudited($query, array($fileId, $user));
03e52840d   Kload   Init
125
126
  		}
  	}
31b7f2792   Kload   Upgrade to ownclo...
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   Kload   Init
142
  }