Files
ms1inscription-v5/rapports/components/security/user_management_request_handler.php
2026-05-13 09:43:32 -04:00

188 lines
5.8 KiB
PHP

<?php
include_once dirname(__FILE__) . '/' . '../application.php';
include_once dirname(__FILE__) . '/' . '../utils/request_router.php';
include_once dirname(__FILE__) . '/' . 'user_self_management.php';
include_once dirname(__FILE__) . '/' . 'user_identity_cookie_storage.php';
class UserManagementRequestHandler
{
/**
* @var RequestRouter
*/
private $router;
/** @var TableBasedUserGrantsManager */
private $tableBasedGrantsManager;
/** @var IdentityCheckStrategy */
private $identityCheckStrategy;
/**
* @var SecureApplication
*/
private $app;
/**
* @var UserIdentityCookieStorage
*/
private $userIdentityStorage;
/**
* @param TableBasedUserGrantsManager $tableBasedGrantsManager
* @param IdentityCheckStrategy $identityCheckStrategy
*/
private function __construct($tableBasedGrantsManager, $identityCheckStrategy)
{
$this->tableBasedGrantsManager = $tableBasedGrantsManager;
$this->identityCheckStrategy = $identityCheckStrategy;
$this->router = $this->CreateAndConfigureRequestRouter();
$this->app = GetApplication();
$this->userIdentityStorage = new UserIdentityCookieStorage($identityCheckStrategy);
}
/**
* @param string $currentPassword
* @param string $newPassword
*/
public function SelfChangePassword($currentPassword, $newPassword)
{
$userSelfManagement = new UserSelfManagement($this->app,
$this->tableBasedGrantsManager, $this->identityCheckStrategy);
$userSelfManagement->ValidateAndChangePassword($currentPassword, $newPassword);
$this->userIdentityStorage->UpdatePassword($newPassword);
}
/**
* @param int $userId
* @param string $userName
* @param string $password
* @return array
*/
public function AdminAddUser($userId, $userName, $password)
{
$this->CheckAdminGrant();
$this->tableBasedGrantsManager->AddUser($userId, $userName, $password);
return array('id' => $userId, 'name' => $userName, 'password' => '******');
}
/**
* @param int $userId
*/
public function AdminRemoveUser($userId)
{
$this->CheckAdminGrant();
$this->tableBasedGrantsManager->RemoveUser($userId);
}
/**
* @param int $userId
* @param string $newUserName
* @return array
*/
public function AdminChangeUserName($userId, $newUserName)
{
$this->CheckAdminGrant();
return array('username' => $this->tableBasedGrantsManager->ChangeUserName($userId, $newUserName));
}
/**
* @param int $userId
* @param string $newUserPassword
* @return array
*/
public function AdminChangeUserPassword($userId, $newUserPassword)
{
$this->CheckAdminGrant();
$this->tableBasedGrantsManager->ChangeUserPassword($userId, $newUserPassword);
}
/**
* @param int $userId
* @return array
*/
public function AdminGetUserGrants($userId)
{
$this->CheckAdminGrant();
return $this->tableBasedGrantsManager->GetUserGrants($userId, new Captions('UTF-8'));
}
/**
* @param int $userId
* @param string $pageName
* @param string $grant
*/
public function AdminAddUserGrant($userId, $pageName, $grant)
{
$this->CheckAdminGrant();
$this->tableBasedGrantsManager->AddUserGrant($userId, $pageName, $grant);
}
/**
* @param int $userId
* @param string $pageName
* @param string $grant
*/
public function AdminRemoveUserGrant($userId, $pageName, $grant)
{
$this->CheckAdminGrant();
$this->tableBasedGrantsManager->RemoveUserGrant($userId, $pageName, $grant);
}
/**
* @return RequestRouter
*/
private function CreateAndConfigureRequestRouter()
{
$routes = array(
new RequestRoute('self_change_password',
array($this, 'SelfChangePassword'),
array('current_password', 'new_password')),
new RequestRoute('au',
array($this, 'AdminAddUser'),
array('id', 'username', 'password')),
new RequestRoute('ru',
array($this, 'AdminRemoveUser'),
array('user_id')),
new RequestRoute('eu',
array($this, 'AdminChangeUserName'),
array('user_id', 'username')),
new RequestRoute('cup',
array($this, 'AdminChangeUserPassword'),
array('user_id', 'password')),
new RequestRoute('gug',
array($this, 'AdminGetUserGrants'),
array('user_id')),
new RequestRoute('aug',
array($this, 'AdminAddUserGrant'),
array('user_id', 'page_name', 'grant')),
new RequestRoute('rug',
array($this, 'AdminRemoveUserGrant'),
array('user_id', 'page_name', 'grant'))
);
$result = new RequestRouter($routes, 'hname');
return $result;
}
/**
* @throws Exception
*/
private function CheckAdminGrant()
{
if (!$this->app->GetUserAuthorizationStrategy()->HasAdminGrant($this->app->GetCurrentUser()))
throw new Exception(GetCaptions('UTF-8')->GetMessageString('AccessDenied'));
}
/**
* @param array $parameters
* @param TableBasedUserGrantsManager $tableBasedGrantsManager
* @param IdentityCheckStrategy $identityCheckStrategy
*/
static public function HandleRequest($parameters, $tableBasedGrantsManager, $identityCheckStrategy)
{
$instance = new UserManagementRequestHandler($tableBasedGrantsManager, $identityCheckStrategy);
header('Content-Type: application/json');
echo $instance->router->HandleRequest($parameters);
}
}