Merge pull request #30926 from rotdrop/bugfix/settings-delegation-for-subadmins

Allow sub-admins to access delegated settings.
pull/30954/head
Louis 2022-01-31 16:55:53 +07:00 committed by GitHub
commit b47a42f935
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 14 deletions

@ -335,23 +335,20 @@ class Manager implements IManager {
public function getAllowedAdminSettings(string $section, IUser $user): array {
$isAdmin = $this->groupManager->isAdmin($user->getUID());
$isSubAdmin = $this->subAdmin->isSubAdmin($user);
$subAdminOnly = !$isAdmin && $isSubAdmin;
if ($subAdminOnly) {
// not an admin => look if the user is still authorized to access some
// settings
$subAdminSettingsFilter = function (ISettings $settings) {
return $settings instanceof ISubAdminSettings;
};
$appSettings = $this->getSettings('admin', $section, $subAdminSettingsFilter);
} elseif ($isAdmin) {
if ($isAdmin) {
$appSettings = $this->getSettings('admin', $section);
} else {
$authorizedSettingsClasses = $this->mapper->findAllClassesForUser($user);
$authorizedGroupFilter = function (ISettings $settings) use ($authorizedSettingsClasses) {
return in_array(get_class($settings), $authorizedSettingsClasses) === true;
};
if ($this->subAdmin->isSubAdmin($user)) {
$authorizedGroupFilter = function (ISettings $settings) use ($authorizedSettingsClasses) {
return $settings instanceof ISubAdminSettings
|| in_array(get_class($settings), $authorizedSettingsClasses) === true;
};
} else {
$authorizedGroupFilter = function (ISettings $settings) use ($authorizedSettingsClasses) {
return in_array(get_class($settings), $authorizedSettingsClasses) === true;
};
}
$appSettings = $this->getSettings('admin', $section, $authorizedGroupFilter);
}