diff options
author | Roeland Jago Douma <roeland@famdouma.nl> | 2016-10-19 21:27:07 +0200 |
---|---|---|
committer | Roeland Jago Douma <roeland@famdouma.nl> | 2017-04-13 12:58:49 +0200 |
commit | 88299ec27c209a432f925f19970e581f46fc54cd (patch) | |
tree | 20039a2717e0084ff2d569b3b4ddbe61a2dad849 /lib | |
parent | 7dcc98eb202c089a2966004ffb988166f3c4e3d7 (diff) | |
download | nextcloud-server-88299ec27c209a432f925f19970e581f46fc54cd.tar.gz nextcloud-server-88299ec27c209a432f925f19970e581f46fc54cd.zip |
Added to public interface
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/Share20/Manager.php | 15 | ||||
-rw-r--r-- | lib/public/Share/IManager.php | 30 |
2 files changed, 41 insertions, 4 deletions
diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php index ce0444a76ba..d93883e95d4 100644 --- a/lib/private/Share20/Manager.php +++ b/lib/private/Share20/Manager.php @@ -1196,17 +1196,21 @@ class Manager implements IManager { * remote => bool * ] * - * This is required for encryption/activities + * This is required for encryption/activity * * @param \OCP\Files\Node $path + * @param bool $recursive Should we check all parent folders as well * @return array */ - public function getAccessList(\OCP\Files\Node $path) { + public function getAccessList(\OCP\Files\Node $path, $recursive = true) { $owner = $path->getOwner()->getUID(); //Get node for the owner $userFolder = $this->rootFolder->getUserFolder($owner); - $path = $userFolder->getById($path->getId())[0]; + + if (!$userFolder->isSubNode($path)) { + $path = $userFolder->getById($path->getId())[0]; + } $providers = $this->factory->getAllProviders(); @@ -1214,10 +1218,13 @@ class Manager implements IManager { $shares = []; // Collect all the shares - while ($path !== $userFolder) { + while ($path->getPath() !== $userFolder->getPath()) { foreach ($providers as $provider) { $shares = array_merge($shares, $provider->getSharesByPath($path)); } + if (!$recursive) { + break; + } $path = $path->getParent(); } diff --git a/lib/public/Share/IManager.php b/lib/public/Share/IManager.php index a15020bbd69..45e0e9d80c2 100644 --- a/lib/public/Share/IManager.php +++ b/lib/public/Share/IManager.php @@ -192,6 +192,36 @@ interface IManager { public function userDeletedFromGroup($uid, $gid); /** + * Get access list to a path. This means + * all the users that can access a given path. + * + * Consider: + * -root + * |-folder1 + * |-folder2 + * |-fileA + * + * fileA is shared with user1 + * folder2 is shared with group2 (user4 is a member of group2) + * folder1 is shared with user2 + * + * Then the access list will to '/folder1/folder2/fileA' is: + * [ + * users => ['user1', 'user2', 'user4'], + * public => bool + * remote => bool + * ] + * + * This is required for encryption/activity + * + * @param \OCP\Files\Node $path + * @param bool $recursive Should we check all parent folders as well + * @return array + * @since 9.2.0 + */ + public function getAccessList(\OCP\Files\Node $path, $recursive = true); + + /** * Instantiates a new share object. This is to be passed to * createShare. * |