From 3d4d5fe48f49a463ac9d0b0a6c09b6019f6a919a Mon Sep 17 00:00:00 2001 From: "Misha M.-Kupriyanov" Date: Wed, 1 Oct 2025 11:57:09 +0200 Subject: [PATCH] fix(admin-delegation): display delegated section in common settings for non-admin IDeclarativeSettingsForm can't be delegated and can be shown only to admin. Lets not load IDeclarativeSettings for non admins. Otherwise we get "Access forbidden" while displaying /settings/admin and prevent to show delegated sections to non admin like: Background jobs OCA\Settings\Settings\Admin\Server Email server OCA\Settings\Settings\Admin\Mail Signed-off-by: Misha M.-Kupriyanov --- .../lib/Controller/CommonSettingsTrait.php | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/settings/lib/Controller/CommonSettingsTrait.php b/apps/settings/lib/Controller/CommonSettingsTrait.php index c4949339ad569..5e80848504159 100644 --- a/apps/settings/lib/Controller/CommonSettingsTrait.php +++ b/apps/settings/lib/Controller/CommonSettingsTrait.php @@ -136,13 +136,17 @@ private function getIndexResponse(string $type, string $section): TemplateRespon $user = $this->userSession->getUser(); assert($user !== null, 'No user logged in for settings'); - $this->declarativeSettingsManager->loadSchemas(); - $declarativeSettings = $this->declarativeSettingsManager->getFormsWithValues($user, $type, $section); + $declarativeSettings = []; - foreach ($declarativeSettings as &$form) { - foreach ($form['fields'] as &$field) { - if (isset($field['sensitive']) && $field['sensitive'] === true && !empty($field['value'])) { - $field['value'] = 'dummySecret'; + if ($type !== 'admin' || $this->groupManager->isAdmin($user->getUID())) { + $this->declarativeSettingsManager->loadSchemas(); + $declarativeSettings = $this->declarativeSettingsManager->getFormsWithValues($user, $type, $section); + + foreach ($declarativeSettings as &$form) { + foreach ($form['fields'] as &$field) { + if (isset($field['sensitive']) && $field['sensitive'] === true && !empty($field['value'])) { + $field['value'] = 'dummySecret'; + } } } }