diff options
author | Louis <louis@chmn.me> | 2024-03-22 20:35:11 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-22 20:35:11 +0100 |
commit | ddb84f9738957368232e587e76c0d64804777c16 (patch) | |
tree | aba9bc3c42411b5dae77fbbccbbf59e18179b960 /apps/files_versions | |
parent | f3f73ba25552b030d4634a63a3ccc06e59d7bb77 (diff) | |
parent | a15c0d65150b89be497a1f75a40b872a11a30bfc (diff) | |
download | nextcloud-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.php | 20 |
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 { |