diff --git a/lib/ACL/ACLManager.php b/lib/ACL/ACLManager.php index 56c9d8d29..ed13aa365 100644 --- a/lib/ACL/ACLManager.php +++ b/lib/ACL/ACLManager.php @@ -241,4 +241,8 @@ public function getPermissionsForTree(string $path): int { return $permissions & $denyMask; }, Constants::PERMISSION_ALL); } + + public function preloadRulesForFolder(string $path): void { + $this->ruleManager->getRulesForFilesByParent($this->user, $this->getRootStorageId(), $path); + } } diff --git a/lib/Trash/TrashBackend.php b/lib/Trash/TrashBackend.php index 44f452592..625e98e7a 100644 --- a/lib/Trash/TrashBackend.php +++ b/lib/Trash/TrashBackend.php @@ -94,7 +94,11 @@ public function listTrashFolder(ITrashItem $trashItem): array { return []; } $content = $folder->getDirectoryListing(); - return array_map(function (Node $node) use ($trashItem, $user) { + $this->aclManagerFactory->getACLManager($user)->preloadRulesForFolder($trashItem->getPath()); + return array_values(array_filter(array_map(function (Node $node) use ($trashItem, $user) { + if (!$this->userHasAccessToPath($user, $trashItem->getPath() . '/' . $node->getName())) { + return null; + } return new GroupTrashItem( $this, $trashItem->getOriginalLocation() . '/' . $node->getName(), @@ -104,7 +108,7 @@ public function listTrashFolder(ITrashItem $trashItem): array { $user, $trashItem->getGroupFolderMountPoint() ); - }, $content); + }, $content))); } /** @@ -330,6 +334,7 @@ private function getTrashForFolders(IUser $user, array $folders): array { $mountPoint = $folder['mount_point']; $trashFolder = $this->getTrashFolder($folderId); $content = $trashFolder->getDirectoryListing(); + $this->aclManagerFactory->getACLManager($user)->preloadRulesForFolder($trashFolder->getPath()); foreach ($content as $item) { /** @var \OC\Files\Node\Node $item */ $pathParts = pathinfo($item->getName());