diff options
author | Morris Jobke <hey@morrisjobke.de> | 2021-04-28 20:27:40 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-28 20:27:40 +0200 |
commit | b971f69e264209f199b19f72484ea0af3d79201c (patch) | |
tree | 01391e014daf41b07b63a458b4f71ccaa7caa3e7 /apps/provisioning_api/lib/Controller/UsersController.php | |
parent | d93b001e27609198df87be5a079b00cf1b6b53b0 (diff) | |
parent | 03b467bd237a2b7849092c3991a76ed1205bd583 (diff) | |
download | nextcloud-server-b971f69e264209f199b19f72484ea0af3d79201c.tar.gz nextcloud-server-b971f69e264209f199b19f72484ea0af3d79201c.zip |
Merge pull request #26461 from nextcloud/bugfix/noid/only-return-editable-displayname-field-when-allowed-by-backend
Only return display name as editable when the user backend allows it
Diffstat (limited to 'apps/provisioning_api/lib/Controller/UsersController.php')
-rw-r--r-- | apps/provisioning_api/lib/Controller/UsersController.php | 46 |
1 files changed, 40 insertions, 6 deletions
diff --git a/apps/provisioning_api/lib/Controller/UsersController.php b/apps/provisioning_api/lib/Controller/UsersController.php index 5961a3cca05..115b955354b 100644 --- a/apps/provisioning_api/lib/Controller/UsersController.php +++ b/apps/provisioning_api/lib/Controller/UsersController.php @@ -50,6 +50,7 @@ use OC\Accounts\AccountManager; use OC\Authentication\Token\RemoteWipe; use OC\HintException; use OC\KnownUser\KnownUserService; +use OC\User\Backend; use OCA\Settings\Mailer\NewUserMailHelper; use OCP\Accounts\IAccountManager; use OCP\App\IAppManager; @@ -70,6 +71,7 @@ use OCP\L10N\IFactory; use OCP\Security\ISecureRandom; use OCP\Security\Events\GenerateSecurePasswordEvent; use OCP\EventDispatcher\IEventDispatcher; +use OCP\User\Backend\ISetDisplayNameBackend; use Psr\Log\LoggerInterface; class UsersController extends AUserData { @@ -538,13 +540,39 @@ class UsersController extends AUserData { /** * @NoAdminRequired * @NoSubAdminRequired + * + * @return DataResponse + * @throws OCSException */ - public function getEditableFields(): DataResponse { + public function getEditableFields(?string $userId = null): DataResponse { + $currentLoggedInUser = $this->userSession->getUser(); + if (!$currentLoggedInUser instanceof IUser) { + throw new OCSException('', OCSController::RESPOND_NOT_FOUND); + } + $permittedFields = []; + if ($userId !== $currentLoggedInUser->getUID()) { + $targetUser = $this->userManager->get($userId); + if (!$targetUser instanceof IUser) { + throw new OCSException('', OCSController::RESPOND_NOT_FOUND); + } + + $subAdminManager = $this->groupManager->getSubAdmin(); + if (!$this->groupManager->isAdmin($currentLoggedInUser->getUID()) + && !$subAdminManager->isUserAccessible($currentLoggedInUser, $targetUser)) { + throw new OCSException('', OCSController::RESPOND_NOT_FOUND); + } + } else { + $targetUser = $currentLoggedInUser; + } + // Editing self (display, email) if ($this->config->getSystemValue('allow_user_to_change_display_name', true) !== false) { - $permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME; + if ($targetUser->getBackend() instanceof ISetDisplayNameBackend + || $targetUser->getBackend()->implementsActions(Backend::SET_DISPLAYNAME)) { + $permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME; + } $permittedFields[] = IAccountManager::PROPERTY_EMAIL; } @@ -581,8 +609,11 @@ class UsersController extends AUserData { if ($targetUser->getUID() === $currentLoggedInUser->getUID()) { // Editing self (display, email) if ($this->config->getSystemValue('allow_user_to_change_display_name', true) !== false) { - $permittedFields[] = 'display'; - $permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME; + if ($targetUser->getBackend() instanceof ISetDisplayNameBackend + || $targetUser->getBackend()->implementsActions(Backend::SET_DISPLAYNAME)) { + $permittedFields[] = 'display'; + $permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME; + } $permittedFields[] = IAccountManager::PROPERTY_EMAIL; } @@ -621,8 +652,11 @@ class UsersController extends AUserData { if ($this->groupManager->isAdmin($currentLoggedInUser->getUID()) || $subAdminManager->isUserAccessible($currentLoggedInUser, $targetUser)) { // They have permissions over the user - $permittedFields[] = 'display'; - $permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME; + if ($targetUser->getBackend() instanceof ISetDisplayNameBackend + || $targetUser->getBackend()->implementsActions(Backend::SET_DISPLAYNAME)) { + $permittedFields[] = 'display'; + $permittedFields[] = IAccountManager::PROPERTY_DISPLAYNAME; + } $permittedFields[] = IAccountManager::PROPERTY_EMAIL; $permittedFields[] = 'password'; $permittedFields[] = 'language'; |