Skip to content

Commit 22f8473

Browse files
committed
feat: dispatch UserShareAccessUpdatedEvent on ACL add/remove
Signed-off-by: grnd-alt <[email protected]>
1 parent 709e23b commit 22f8473

File tree

3 files changed

+66
-0
lines changed

3 files changed

+66
-0
lines changed

lib/AppInfo/Application.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
use OCA\Deck\Event\CardUpdatedEvent;
2828
use OCA\Deck\Event\SessionClosedEvent;
2929
use OCA\Deck\Event\SessionCreatedEvent;
30+
use OCA\Deck\Listeners\AclCreatedRemovedListener;
3031
use OCA\Deck\Listeners\BeforeTemplateRenderedListener;
3132
use OCA\Deck\Listeners\CommentEventListener;
3233
use OCA\Deck\Listeners\FullTextSearchEventListener;
@@ -134,6 +135,10 @@ public function register(IRegistrationContext $context): void {
134135

135136
$context->registerEventListener(BeforeTemplateRenderedEvent::class, BeforeTemplateRenderedListener::class);
136137

138+
// Event listening to emit UserShareAccessUpdatedEvent for files_sharing
139+
$context->registerEventListener(AclCreatedEvent::class, AclCreatedRemovedListener::class);
140+
$context->registerEventListener(AclDeletedEvent::class, AclCreatedRemovedListener::class);
141+
137142
// Event listening for full text search indexing
138143
$context->registerEventListener(CardCreatedEvent::class, FullTextSearchEventListener::class);
139144
$context->registerEventListener(CardUpdatedEvent::class, FullTextSearchEventListener::class);
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
/**
4+
* SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
5+
* SPDX-License-Identifier: AGPL-3.0-or-later
6+
*/
7+
namespace OCA\Deck\Listeners;
8+
9+
use OCA\Deck\Event\AclCreatedEvent;
10+
use OCA\Deck\Event\AclDeletedEvent;
11+
use OCA\Files_Sharing\Event\UserShareAccessUpdatedEvent;
12+
use OCP\EventDispatcher\Event;
13+
use OCP\EventDispatcher\IEventDispatcher;
14+
use OCP\EventDispatcher\IEventListener;
15+
use OCP\IGroupManager;
16+
use OCP\IUserManager;
17+
use OCP\Share\IShare;
18+
19+
class AclCreatedRemovedListener implements IEventListener {
20+
public function __construct(
21+
private IGroupManager $groupManager,
22+
private IEventDispatcher $eventDispatcher,
23+
private IUserManager $userManager,
24+
) {
25+
}
26+
27+
public function handle(Event $event): void {
28+
if (!$event instanceof AclDeletedEvent && !$event instanceof AclCreatedEvent) {
29+
return;
30+
}
31+
32+
$acl = $event->getAcl();
33+
if ($acl->getType() === IShare::TYPE_GROUP) {
34+
$group = $this->groupManager->get($acl->getParticipant());
35+
foreach ($group->getUsers() as $user) {
36+
$this->eventDispatcher->dispatchTyped(new UserShareAccessUpdatedEvent($user));
37+
}
38+
} else {
39+
$user = $this->userManager->get($acl->getParticipant());
40+
$this->eventDispatcher->dispatchTyped(new UserShareAccessUpdatedEvent($user));
41+
}
42+
}
43+
}

lib/Service/BoardService.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
namespace OCA\Deck\Service;
99

10+
use OC\User\LazyUser;
1011
use OCA\Deck\Activity\ActivityManager;
1112
use OCA\Deck\Activity\ChangeSet;
1213
use OCA\Deck\AppInfo\Application;
@@ -34,6 +35,7 @@
3435
use OCA\Deck\NoPermissionException;
3536
use OCA\Deck\Notification\NotificationHelper;
3637
use OCA\Deck\Validators\BoardServiceValidator;
38+
use OCA\Files_Sharing\Event\UserShareAccessUpdatedEvent;
3739
use OCP\AppFramework\Db\DoesNotExistException;
3840
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
3941
use OCP\DB\Exception as DbException;
@@ -42,6 +44,7 @@
4244
use OCP\IDBConnection;
4345
use OCP\IL10N;
4446
use OCP\IURLGenerator;
47+
use OCP\IUserManager;
4548
use OCP\Server;
4649
use Psr\Container\ContainerExceptionInterface;
4750
use Psr\Container\NotFoundExceptionInterface;
@@ -69,6 +72,7 @@ public function __construct(
6972
private IDBConnection $connection,
7073
private BoardServiceValidator $boardServiceValidator,
7174
private SessionMapper $sessionMapper,
75+
private IUserManager $userManager,
7276
private ?string $userId,
7377
) {
7478
}
@@ -235,6 +239,13 @@ public function delete(int $id): Board {
235239
$this->activityManager->triggerEvent(ActivityManager::DECK_OBJECT_BOARD, $board, ActivityManager::SUBJECT_BOARD_DELETE);
236240
$this->changeHelper->boardChanged($board->getId());
237241

242+
$acls = $this->aclMapper->findAll($id);
243+
foreach ($acls as $acl) {
244+
$user = new LazyUser($acl->getParticipant(), $this->userManager);
245+
$event = new UserShareAccessUpdatedEvent($user);
246+
$this->eventDispatcher->dispatchTyped($event);
247+
}
248+
238249
return $board;
239250
}
240251

@@ -253,6 +264,13 @@ public function deleteUndo(int $id): Board {
253264
$this->activityManager->triggerEvent(ActivityManager::DECK_OBJECT_BOARD, $board, ActivityManager::SUBJECT_BOARD_RESTORE);
254265
$this->changeHelper->boardChanged($board->getId());
255266

267+
$acls = $this->aclMapper->findAll($id);
268+
foreach ($acls as $acl) {
269+
$user = new LazyUser($acl->getParticipant(), $this->userManager);
270+
$event = new UserShareAccessUpdatedEvent($user);
271+
$this->eventDispatcher->dispatchTyped($event);
272+
}
273+
256274
return $board;
257275
}
258276

0 commit comments

Comments
 (0)