AdminAccountPage: Fetch the entire set of users only if necessary
refs #8704
This commit is contained in:
parent
e795665421
commit
3ea9e50c02
|
@ -5,6 +5,8 @@ namespace Icinga\Module\Setup\Forms;
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use Icinga\Authentication\User\UserBackend;
|
use Icinga\Authentication\User\UserBackend;
|
||||||
|
use Icinga\Authentication\User\DbUserBackend;
|
||||||
|
use Icinga\Authentication\User\LdapUserBackend;
|
||||||
use Icinga\Data\ConfigObject;
|
use Icinga\Data\ConfigObject;
|
||||||
use Icinga\Web\Form;
|
use Icinga\Web\Form;
|
||||||
|
|
||||||
|
@ -204,7 +206,7 @@ class AdminAccountPage extends Form
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($data['user_type'] === 'new_user' && array_search($data['new_user'], $this->fetchUsers()) !== false) {
|
if ($data['user_type'] === 'new_user' && !$this->hasUser($data['new_user'])) {
|
||||||
$this->getElement('new_user')->addError($this->translate('Username already exists.'));
|
$this->getElement('new_user')->addError($this->translate('Username already exists.'));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -254,21 +256,41 @@ class AdminAccountPage extends Form
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the names of all users this backend currently provides
|
* Return the names of all users the backend currently provides
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function fetchUsers()
|
protected function fetchUsers()
|
||||||
{
|
{
|
||||||
$config = new ConfigObject($this->backendConfig);
|
|
||||||
$config->resource = $this->resourceConfig;
|
|
||||||
$backend = UserBackend::create(null, $config);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return $backend->select(array('user_name'))->order('user_name', 'asc', true)->fetchColumn();
|
return $this->createBackend()->select(array('user_name'))->order('user_name', 'asc', true)->fetchColumn();
|
||||||
} catch (Exception $_) {
|
} catch (Exception $_) {
|
||||||
// No need to handle anything special here. Error means no users found.
|
// No need to handle anything special here. Error means no users found.
|
||||||
return array();
|
return array();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return whether the backend provides a user with the given name
|
||||||
|
*
|
||||||
|
* @param string $username
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function hasUser($username)
|
||||||
|
{
|
||||||
|
return $this->createBackend()->select()->where('user_name', $username)->count() > 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create and return the backend
|
||||||
|
*
|
||||||
|
* @return DbUserBackend|LdapUserBackend
|
||||||
|
*/
|
||||||
|
protected function createBackend()
|
||||||
|
{
|
||||||
|
$config = new ConfigObject($this->backendConfig);
|
||||||
|
$config->resource = $this->resourceConfig;
|
||||||
|
return UserBackend::create(null, $config);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue