aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxence Lange <maxence@artificial-owl.com>2018-10-29 10:03:52 +0100
committerJulius Härtl <jus@bitgrid.net>2018-11-02 12:09:26 +0100
commit68c44bb6427632e237792bd75d874be4b4562f3f (patch)
treed93a96cdbe77ea1249782258c9072bab88b2480a
parentf13c7dda1cc777e73a4e615d12334276e9b3ec03 (diff)
downloadnextcloud-server-68c44bb6427632e237792bd75d874be4b4562f3f.tar.gz
nextcloud-server-68c44bb6427632e237792bd75d874be4b4562f3f.zip
shares are displayed to users with resharing rights
Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
-rw-r--r--apps/files_sharing/lib/Controller/ShareAPIController.php38
-rw-r--r--lib/private/Share20/DefaultShareProvider.php22
2 files changed, 49 insertions, 11 deletions
diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php
index 61fad5d2b14..fc03a357f35 100644
--- a/apps/files_sharing/lib/Controller/ShareAPIController.php
+++ b/apps/files_sharing/lib/Controller/ShareAPIController.php
@@ -720,14 +720,23 @@ class ShareAPIController extends OCSController {
}
$formatted = [];
+ $resharingRight = false;
foreach ($shares as $share) {
try {
$formatted[] = $this->formatShare($share, $path);
+ if (!$resharingRight && $this->shareProviderResharingRights($this->currentUser, $share)) {
+ $resharingRight = true;
+ }
+
} catch (NotFoundException $e) {
//Ignore share
}
}
+ if (!$resharingRight) {
+ $formatted = [];
+ }
+
if ($include_tags) {
$formatted = Helper::populateTags($formatted, 'file_source', \OC::$server->getTagManager());
}
@@ -1102,4 +1111,33 @@ class ShareAPIController extends OCSController {
return $this->serverContainer->query('\OCA\Spreed\Share\Helper\ShareAPIController');
}
+
+
+ /**
+ * Returns if we can find resharing rights in an IShare object for a specific user.
+ *
+ * @param string $userId
+ * @param IShare $share
+ * @return bool
+ */
+ private function shareProviderResharingRights(string $userId, IShare $share): bool {
+ if ($share->getShareOwner() === $userId) {
+ return true;
+ }
+
+ if ((\OCP\Constants::PERMISSION_SHARE & $share->getPermissions()) === 0) {
+ return false;
+ }
+
+ if ($share->getShareType() === \OCP\Share::SHARE_TYPE_USER && $share->getSharedWith() === $userId) {
+ return true;
+ }
+
+ if ($share->getShareType() === \OCP\Share::SHARE_TYPE_GROUP && $this->groupManager->isInGroup($userId, $share->getSharedWith())) {
+ return true;
+ }
+
+ return false;
+ }
+
}
diff --git a/lib/private/Share20/DefaultShareProvider.php b/lib/private/Share20/DefaultShareProvider.php
index 50111054546..53fd1728b81 100644
--- a/lib/private/Share20/DefaultShareProvider.php
+++ b/lib/private/Share20/DefaultShareProvider.php
@@ -617,18 +617,18 @@ class DefaultShareProvider implements IShareProvider {
/**
* Reshares for this user are shares where they are the owner.
*/
- if ($reshares === false) {
- $qb->andWhere($qb->expr()->eq('uid_initiator', $qb->createNamedParameter($userId)));
+ if ($node === null) {
+ if ($reshares === false) {
+ $qb->andWhere($qb->expr()->eq('uid_initiator', $qb->createNamedParameter($userId)));
+ } else {
+ $qb->andWhere(
+ $qb->expr()->orX(
+ $qb->expr()->eq('uid_owner', $qb->createNamedParameter($userId)),
+ $qb->expr()->eq('uid_initiator', $qb->createNamedParameter($userId))
+ )
+ );
+ }
} else {
- $qb->andWhere(
- $qb->expr()->orX(
- $qb->expr()->eq('uid_owner', $qb->createNamedParameter($userId)),
- $qb->expr()->eq('uid_initiator', $qb->createNamedParameter($userId))
- )
- );
- }
-
- if ($node !== null) {
$qb->andWhere($qb->expr()->eq('file_source', $qb->createNamedParameter($node->getId())));
}