From 88299ec27c209a432f925f19970e581f46fc54cd Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Wed, 19 Oct 2016 21:27:07 +0200 Subject: [PATCH] Added to public interface Signed-off-by: Roeland Jago Douma --- .htaccess | 4 ---- lib/private/Share20/Manager.php | 15 +++++++++++---- lib/public/Share/IManager.php | 30 ++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/.htaccess b/.htaccess index 26be470fd1..7bf8759e38 100644 --- a/.htaccess +++ b/.htaccess @@ -78,7 +78,3 @@ Options -Indexes ModPagespeed Off -#### DO NOT CHANGE ANYTHING ABOVE THIS LINE #### - -ErrorDocument 403 /core/templates/403.php -ErrorDocument 404 /core/templates/404.php diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php index ce0444a76b..d93883e95d 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 a15020bbd6..45e0e9d80c 100644 --- a/lib/public/Share/IManager.php +++ b/lib/public/Share/IManager.php @@ -191,6 +191,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.