aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Richards <josh.t.richards@gmail.com>2024-07-18 11:29:11 -0400
committerJosh Richards <josh.t.richards@gmail.com>2024-07-18 11:29:32 -0400
commit39291ca393e09a4bf28cee53fcf2f5ca308a5393 (patch)
tree7e08e29a012309c349085b98f9c9d45bcbc6c028
parent9cd2e5bed9c373ec204461648bf962cff82855b1 (diff)
downloadnextcloud-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.php12
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.'.');