diff options
author | Josh Richards <josh.t.richards@gmail.com> | 2024-07-18 11:29:11 -0400 |
---|---|---|
committer | Josh Richards <josh.t.richards@gmail.com> | 2024-07-18 11:29:32 -0400 |
commit | 39291ca393e09a4bf28cee53fcf2f5ca308a5393 (patch) | |
tree | 7e08e29a012309c349085b98f9c9d45bcbc6c028 | |
parent | 9cd2e5bed9c373ec204461648bf962cff82855b1 (diff) | |
download | nextcloud-server-jtr/fix-46609-delegation-add-group-overlap.tar.gz nextcloud-server-jtr/fix-46609-delegation-add-group-overlap.zip |
fix: Don't permit duplicate groups in occ admin-delegation:addjtr/fix-46609-delegation-add-group-overlap
Signed-off-by: Josh Richards <josh.t.richards@gmail.com>
-rw-r--r-- | apps/settings/lib/Command/AdminDelegation/Add.php | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/apps/settings/lib/Command/AdminDelegation/Add.php b/apps/settings/lib/Command/AdminDelegation/Add.php index 4ec6510f205..73c995b4762 100644 --- a/apps/settings/lib/Command/AdminDelegation/Add.php +++ b/apps/settings/lib/Command/AdminDelegation/Add.php @@ -40,16 +40,24 @@ class Add extends Base { $io = new SymfonyStyle($input, $output); $settingClass = $input->getArgument('settingClass'); if (!in_array(IDelegatedSettings::class, (array) class_implements($settingClass), true)) { - $io->error('The specified class isn’t a valid delegated setting.'); + $io->error('The specified class is not a valid delegated setting.'); return 2; } $groupId = $input->getArgument('groupId'); if (!$this->groupManager->groupExists($groupId)) { - $io->error('The specified group didn’t exist.'); + $io->error('The specified group does not exist.'); return 3; } + $groups = $this->authorizedGroupService->findExistingGroupsForClass($settingClass); + foreach ($groups as $group) { + if ($group->getGroupId() === $groupId) { + $io->error('The specified group has already been delegated to.'); + return 4; + } + } + $this->authorizedGroupService->create($groupId, $settingClass); $io->success('Administration of '.$settingClass.' delegated to '.$groupId.'.'); |