From e444b2e25ebef8555e4cbad99c7c3ca86df2c53c Mon Sep 17 00:00:00 2001 From: provokateurin Date: Thu, 23 Jul 2026 10:00:59 +0200 Subject: [PATCH] fix(SharingManager): Skip interaction checks if checks are overridden Signed-off-by: provokateurin --- lib/private/Sharing/SharingManager.php | 32 +++++++++++++++----------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/lib/private/Sharing/SharingManager.php b/lib/private/Sharing/SharingManager.php index fddfe871e5155..37657fdbf5747 100644 --- a/lib/private/Sharing/SharingManager.php +++ b/lib/private/Sharing/SharingManager.php @@ -201,10 +201,12 @@ public function addShareSource(ShareAccessContext $accessContext, string $id, Sh throw new ShareInvalidException('Invalid source: ' . $source->value . ' ' . $source->class, $this->l10n->t('The source does not exist.')); } - $share = $this->getShare($accessContext, $id, $backend); - $sources = $share->sources; - $sources[] = $source; - $this->validateInteraction($accessContext, $owner, $sources, $share->getEnabledPermissions(), $share->recipients); + if (!$accessContext->overrideChecks) { + $share = $this->getShare($accessContext, $id, $backend); + $sources = $share->sources; + $sources[] = $source; + $this->validateInteraction($accessContext, $owner, $sources, $share->getEnabledPermissions(), $share->recipients); + } $backend->addShareSource($id, $source); } @@ -277,10 +279,12 @@ public function addShareRecipient(ShareAccessContext $accessContext, string $id, throw new ShareInvalidException('Invalid recipient: ' . $recipient->value . ' ' . $recipient->class . ' ' . ($recipient->instance ?? 'local'), $this->l10n->t('The recipient does not exist.')); } - $share ??= $this->getShare($accessContext, $id, $backend); - $recipients = $share->recipients; - $recipients[] = $recipient; - $this->validateInteraction($accessContext, $owner, $share->sources, $share->getEnabledPermissions(), $recipients); + if (!$accessContext->overrideChecks) { + $share ??= $this->getShare($accessContext, $id, $backend); + $recipients = $share->recipients; + $recipients[] = $recipient; + $this->validateInteraction($accessContext, $owner, $share->sources, $share->getEnabledPermissions(), $recipients); + } $backend->addShareRecipient($id, $currentUser, $recipient); } @@ -423,12 +427,12 @@ public function updateSharePermission(ShareAccessContext $accessContext, string throw new RuntimeException('The permission type is not registered: ' . $permission->class); } - $share = $this->getShare($accessContext, $id, $backend); - - $permissions = $share->permissions; - $permissions[$permission->class] = $permission; - - $this->validateInteraction($accessContext, $owner, $share->sources, array_filter($permissions, static fn (SharePermission $permission): bool => $permission->enabled), $share->recipients); + if (!$accessContext->overrideChecks) { + $share = $this->getShare($accessContext, $id, $backend); + $permissions = $share->permissions; + $permissions[$permission->class] = $permission; + $this->validateInteraction($accessContext, $owner, $share->sources, array_filter($permissions, static fn (SharePermission $permission): bool => $permission->enabled), $share->recipients); + } $backend->updateSharePermission($id, $permission);