aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_versions
diff options
context:
space:
mode:
authorLouis <louis@chmn.me>2024-03-22 20:35:11 +0100
committerGitHub <noreply@github.com>2024-03-22 20:35:11 +0100
commitddb84f9738957368232e587e76c0d64804777c16 (patch)
treeaba9bc3c42411b5dae77fbbccbbf59e18179b960 /apps/files_versions
parentf3f73ba25552b030d4634a63a3ccc06e59d7bb77 (diff)
parenta15c0d65150b89be497a1f75a40b872a11a30bfc (diff)
downloadnextcloud-server-ddb84f9738957368232e587e76c0d64804777c16.tar.gz
nextcloud-server-ddb84f9738957368232e587e76c0d64804777c16.zip
Merge pull request #44362 from nextcloud/artonge/feat/check_permissions_of_all_nodes_for_versions
Check permissions of all accessible file for versions
Diffstat (limited to 'apps/files_versions')
-rw-r--r--apps/files_versions/lib/Versions/LegacyVersionsBackend.php20
1 files changed, 14 insertions, 6 deletions
diff --git a/apps/files_versions/lib/Versions/LegacyVersionsBackend.php b/apps/files_versions/lib/Versions/LegacyVersionsBackend.php
index 0f752c2ea68..dcc56225c73 100644
--- a/apps/files_versions/lib/Versions/LegacyVersionsBackend.php
+++ b/apps/files_versions/lib/Versions/LegacyVersionsBackend.php
@@ -275,15 +275,23 @@ class LegacyVersionsBackend implements IVersionBackend, IDeletableVersionBackend
throw new NotFoundException("No user logged in");
}
- if ($sourceFile->getOwner()?->getUID() !== $currentUserId) {
- $nodes = $this->rootFolder->getUserFolder($currentUserId)->getById($sourceFile->getId());
- $sourceFile = array_pop($nodes);
- if (!$sourceFile) {
- throw new NotFoundException("Version file not accessible by current user");
+ if ($sourceFile->getOwner()?->getUID() === $currentUserId) {
+ return ($sourceFile->getPermissions() & $permissions) === $permissions;
+ }
+
+ $nodes = $this->rootFolder->getUserFolder($currentUserId)->getById($sourceFile->getId());
+
+ if (count($nodes) === 0) {
+ throw new NotFoundException("Version file not accessible by current user");
+ }
+
+ foreach ($nodes as $node) {
+ if (($node->getPermissions() & $permissions) === $permissions) {
+ return true;
}
}
- return ($sourceFile->getPermissions() & $permissions) === $permissions;
+ return false;
}
public function setMetadataValue(Node $node, int $revision, string $key, string $value): void {