fix: Exclude non accepted shares when computing access list

Signed-off-by: Louis Chemineau <louis@chmn.me>
pull/50559/head
Louis Chemineau 2025-01-30 10:25:00 +07:00
parent 1143f8b8cb
commit 9e6cc5737f
No known key found for this signature in database
2 changed files with 22 additions and 0 deletions

@ -1338,6 +1338,19 @@ class DefaultShareProvider implements IShareProviderWithNotification, IShareProv
$qb->expr()->eq('item_type', $qb->createNamedParameter('file')),
$qb->expr()->eq('item_type', $qb->createNamedParameter('folder'))
));
// Ensure accepted is true for user and usergroup type
$qb->andWhere(
$qb->expr()->orX(
$qb->expr()->andX(
$qb->expr()->neq('share_type', $qb->createNamedParameter(IShare::TYPE_USER)),
$qb->expr()->neq('share_type', $qb->createNamedParameter(IShare::TYPE_USERGROUP)),
),
$qb->expr()->eq('accepted', $qb->createNamedParameter(IShare::STATUS_ACCEPTED, IQueryBuilder::PARAM_INT)),
),
);
$cursor = $qb->execute();
$users = [];

@ -2701,6 +2701,7 @@ class DefaultShareProviderTest extends \Test\TestCase {
->setShareType(IShare::TYPE_USER)
->setPermissions(\OCP\Constants::PERMISSION_ALL);
$share1 = $this->provider->create($share1);
$share1 = $provider->acceptShare($share1, $u2->getUid());
$share2 = $shareManager->newShare();
$share2->setNode($folder2)
@ -2713,6 +2714,9 @@ class DefaultShareProviderTest extends \Test\TestCase {
$shareManager->deleteFromSelf($share2, $u4->getUID());
$share2 = $provider->acceptShare($share2, $u3->getUid());
$share2 = $provider->acceptShare($share2, $u4->getUid());
$share3 = $shareManager->newShare();
$share3->setNode($file1)
->setSharedBy($u3->getUID())
@ -2729,6 +2733,7 @@ class DefaultShareProviderTest extends \Test\TestCase {
->setShareType(IShare::TYPE_USER)
->setPermissions(\OCP\Constants::PERMISSION_READ);
$share4 = $this->provider->create($share4);
$share4 = $provider->acceptShare($share4, $u5->getUid());
$result = $provider->getAccessList([$folder1, $folder2, $file1], false);
@ -2799,6 +2804,7 @@ class DefaultShareProviderTest extends \Test\TestCase {
->setShareType(IShare::TYPE_USER)
->setPermissions(\OCP\Constants::PERMISSION_ALL);
$share1 = $this->provider->create($share1);
$share1 = $provider->acceptShare($share1, $u2->getUid());
$share2 = $shareManager->newShare();
$share2->setNode($folder2)
@ -2808,6 +2814,8 @@ class DefaultShareProviderTest extends \Test\TestCase {
->setShareType(IShare::TYPE_GROUP)
->setPermissions(\OCP\Constants::PERMISSION_ALL);
$share2 = $this->provider->create($share2);
$share2 = $provider->acceptShare($share2, $u3->getUid());
$share2 = $provider->acceptShare($share2, $u4->getUid());
$shareManager->deleteFromSelf($share2, $u4->getUID());
@ -2827,6 +2835,7 @@ class DefaultShareProviderTest extends \Test\TestCase {
->setShareType(IShare::TYPE_USER)
->setPermissions(\OCP\Constants::PERMISSION_READ);
$share4 = $this->provider->create($share4);
$share4 = $provider->acceptShare($share4, $u5->getUid());
$result = $provider->getAccessList([$folder1, $folder2, $file1], true);