fix: remove validate-user-shares-once optimization

Signed-off-by: Robin Appelman <robin@icewind.nl>
This commit is contained in:
Robin Appelman 2026-01-22 19:30:19 +01:00
parent c49665f5cd
commit 3b70d0fcf8
No known key found for this signature in database
GPG key ID: 42B69D8A64526EFB
2 changed files with 1 additions and 16 deletions

View file

@ -48,7 +48,6 @@ use OCP\Files\Config\IMountProviderCollection;
use OCP\Files\Events\BeforeDirectFileDownloadEvent;
use OCP\Files\Events\BeforeZipCreatedEvent;
use OCP\Files\Events\Node\BeforeNodeReadEvent;
use OCP\Files\Events\Node\FilesystemTornDownEvent;
use OCP\Group\Events\GroupChangedEvent;
use OCP\Group\Events\GroupDeletedEvent;
use OCP\Group\Events\UserAddedEvent;
@ -122,7 +121,6 @@ class Application extends App implements IBootstrap {
$context->registerEventListener(UserAddedEvent::class, SharesUpdatedListener::class);
$context->registerEventListener(UserRemovedEvent::class, SharesUpdatedListener::class);
$context->registerEventListener(UserShareAccessUpdatedEvent::class, SharesUpdatedListener::class);
$context->registerEventListener(FilesystemTornDownEvent::class, SharesUpdatedListener::class);
$context->registerConfigLexicon(ConfigLexicon::class);
}

View file

@ -11,12 +11,10 @@ namespace OCA\Files_Sharing\Listener;
use OCA\Files_Sharing\Event\UserShareAccessUpdatedEvent;
use OCA\Files_Sharing\MountProvider;
use OCA\Files_Sharing\ShareTargetValidator;
use OCP\Cache\CappedMemoryCache;
use OCP\EventDispatcher\Event;
use OCP\EventDispatcher\IEventListener;
use OCP\Files\Config\ICachedMountInfo;
use OCP\Files\Config\IUserMountCache;
use OCP\Files\Events\Node\FilesystemTornDownEvent;
use OCP\Group\Events\UserAddedEvent;
use OCP\Group\Events\UserRemovedEvent;
use OCP\IUser;
@ -28,23 +26,17 @@ use OCP\Share\IManager;
/**
* Listen to various events that can change what shares a user has access to
*
* @template-implements IEventListener<UserAddedEvent|UserRemovedEvent|ShareCreatedEvent|ShareTransferredEvent|BeforeShareDeletedEvent|UserShareAccessUpdatedEvent|FilesystemTornDownEvent>
* @template-implements IEventListener<UserAddedEvent|UserRemovedEvent|ShareCreatedEvent|ShareTransferredEvent|BeforeShareDeletedEvent|UserShareAccessUpdatedEvent>
*/
class SharesUpdatedListener implements IEventListener {
private CappedMemoryCache $updatedUsers;
public function __construct(
private readonly IManager $shareManager,
private readonly IUserMountCache $userMountCache,
private readonly MountProvider $shareMountProvider,
private readonly ShareTargetValidator $shareTargetValidator,
) {
$this->updatedUsers = new CappedMemoryCache();
}
public function handle(Event $event): void {
if ($event instanceof FilesystemTornDownEvent) {
$this->updatedUsers = new CappedMemoryCache();
}
if ($event instanceof UserShareAccessUpdatedEvent) {
foreach ($event->getUsers() as $user) {
$this->updateForUser($user);
@ -65,11 +57,6 @@ class SharesUpdatedListener implements IEventListener {
}
private function updateForUser(IUser $user): void {
if (isset($this->updatedUsers[$user->getUID()])) {
return;
}
$this->updatedUsers[$user->getUID()] = true;
$cachedMounts = $this->userMountCache->getMountsForUser($user);
$mountPoints = array_map(fn (ICachedMountInfo $mount) => $mount->getMountPoint(), $cachedMounts);
$mountsByPath = array_combine($mountPoints, $cachedMounts);