aboutsummaryrefslogtreecommitdiffstats
path: root/apps/provisioning_api/lib/Controller/UsersController.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/provisioning_api/lib/Controller/UsersController.php')
-rw-r--r--apps/provisioning_api/lib/Controller/UsersController.php46
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';