Skip to content

Commit 7883665

Browse files
authored
Merge pull request #22015 from nextcloud/bugfix/noid/correctly-remove-user-shares-on-removing-group-members
Correctly remove usergroup shares on removing group members
2 parents 2af77b2 + 5993bd4 commit 7883665

File tree

5 files changed

+56
-2
lines changed

5 files changed

+56
-2
lines changed

lib/base.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
*
6262
*/
6363

64+
use OCP\Group\Events\UserRemovedEvent;
6465
use OCP\ILogger;
6566
use OCP\Share;
6667
use OC\Encryption\HookManager;
@@ -897,8 +898,12 @@ public static function registerFilesystemHooks() {
897898
public static function registerShareHooks() {
898899
if (\OC::$server->getSystemConfig()->getValue('installed')) {
899900
OC_Hook::connect('OC_User', 'post_deleteUser', Hooks::class, 'post_deleteUser');
900-
OC_Hook::connect('OC_User', 'post_removeFromGroup', Hooks::class, 'post_removeFromGroup');
901+
OC_Hook::connect('OC_User', 'post_removeFromGroup', Hooks::class, 'post_removeFromGroupLDAP');
901902
OC_Hook::connect('OC_User', 'post_deleteGroup', Hooks::class, 'post_deleteGroup');
903+
904+
/** @var \OCP\EventDispatcher\IEventDispatcher $dispatcher */
905+
$dispatcher = \OC::$server->get(\OCP\EventDispatcher\IEventDispatcher::class);
906+
$dispatcher->addServiceListener(UserRemovedEvent::class, \OC\Share20\UserRemovedListener::class);
902907
}
903908
}
904909

lib/composer/composer/autoload_classmap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1307,6 +1307,7 @@
13071307
'OC\\Share20\\ProviderFactory' => $baseDir . '/lib/private/Share20/ProviderFactory.php',
13081308
'OC\\Share20\\Share' => $baseDir . '/lib/private/Share20/Share.php',
13091309
'OC\\Share20\\ShareHelper' => $baseDir . '/lib/private/Share20/ShareHelper.php',
1310+
'OC\\Share20\\UserRemovedListener' => $baseDir . '/lib/private/Share20/UserRemovedListener.php',
13101311
'OC\\Share\\Constants' => $baseDir . '/lib/private/Share/Constants.php',
13111312
'OC\\Share\\Helper' => $baseDir . '/lib/private/Share/Helper.php',
13121313
'OC\\Share\\SearchResultSorter' => $baseDir . '/lib/private/Share/SearchResultSorter.php',

lib/composer/composer/autoload_static.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1336,6 +1336,7 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
13361336
'OC\\Share20\\ProviderFactory' => __DIR__ . '/../../..' . '/lib/private/Share20/ProviderFactory.php',
13371337
'OC\\Share20\\Share' => __DIR__ . '/../../..' . '/lib/private/Share20/Share.php',
13381338
'OC\\Share20\\ShareHelper' => __DIR__ . '/../../..' . '/lib/private/Share20/ShareHelper.php',
1339+
'OC\\Share20\\UserRemovedListener' => __DIR__ . '/../../..' . '/lib/private/Share20/UserRemovedListener.php',
13391340
'OC\\Share\\Constants' => __DIR__ . '/../../..' . '/lib/private/Share/Constants.php',
13401341
'OC\\Share\\Helper' => __DIR__ . '/../../..' . '/lib/private/Share/Helper.php',
13411342
'OC\\Share\\SearchResultSorter' => __DIR__ . '/../../..' . '/lib/private/Share/SearchResultSorter.php',

lib/private/Share20/Hooks.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public static function post_deleteGroup($arguments) {
3131
\OC::$server->getShareManager()->groupDeleted($arguments['gid']);
3232
}
3333

34-
public static function post_removeFromGroup($arguments) {
34+
public static function post_removeFromGroupLDAP($arguments) {
3535
\OC::$server->getShareManager()->userDeletedFromGroup($arguments['uid'], $arguments['gid']);
3636
}
3737
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
/**
5+
* @copyright Copyright (c) 2020 Joas Schilling <coding@schilljs.com>
6+
*
7+
* @license GNU AGPL version 3 or any later version
8+
*
9+
* This program is free software: you can redistribute it and/or modify
10+
* it under the terms of the GNU Affero General Public License as
11+
* published by the Free Software Foundation, either version 3 of the
12+
* License, or (at your option) any later version.
13+
*
14+
* This program is distributed in the hope that it will be useful,
15+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17+
* GNU Affero General Public License for more details.
18+
*
19+
* You should have received a copy of the GNU Affero General Public License
20+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
21+
*
22+
*/
23+
24+
namespace OC\Share20;
25+
26+
use OCP\EventDispatcher\Event;
27+
use OCP\EventDispatcher\IEventListener;
28+
use OCP\Group\Events\UserRemovedEvent;
29+
use OCP\Share\IManager;
30+
31+
class UserRemovedListener implements IEventListener {
32+
33+
/** @var IManager */
34+
protected $shareManager;
35+
36+
public function __construct(IManager $shareManager) {
37+
$this->shareManager = $shareManager;
38+
}
39+
40+
public function handle(Event $event): void {
41+
if (!$event instanceof UserRemovedEvent) {
42+
return;
43+
}
44+
45+
$this->shareManager->userDeletedFromGroup($event->getUser()->getUID(), $event->getGroup()->getGID());
46+
}
47+
}

0 commit comments

Comments
 (0)