From 67a4f58436922337e727fd76d1e518a0162746b5 Mon Sep 17 00:00:00 2001 From: Quentin RIBAC <quentin.ribac@xelians.fr> Date: Thu, 2 Dec 2021 11:53:15 +0100 Subject: [PATCH] FEAT #17436 TIME 0:25 GET/rest/manageablegroups --- rest/index.php | 1 + src/app/user/controllers/UserController.php | 37 ++++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/rest/index.php b/rest/index.php index afbf9d6677..82d9b45571 100755 --- a/rest/index.php +++ b/rest/index.php @@ -145,6 +145,7 @@ $app->get('/users/{id}/history', \History\controllers\HistoryController::class . $app->post('/password', \User\controllers\UserController::class . ':forgotPassword'); $app->put('/password', \User\controllers\UserController::class . ':updateForgottenPassword'); $app->put('/users/{id}/accountActivationNotification', \User\controllers\UserController::class . ':sendAccountActivationNotification'); +$app->get('/manageablegroups', \User\controllers\UserController::class . ':getManageableGroupsREST'); //Search $app->post('/search/documents', \Search\controllers\SearchController::class . ':getDocuments'); diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php index b24c49658f..cd84d7776d 100755 --- a/src/app/user/controllers/UserController.php +++ b/src/app/user/controllers/UserController.php @@ -21,6 +21,7 @@ use Email\controllers\EmailController; use Firebase\JWT\JWT; use Group\controllers\PrivilegeController; use Group\models\GroupModel; +use Group\models\GroupPrivilegeModel; use History\controllers\HistoryController; use Respect\Validation\Validator; use Slim\Http\Request; @@ -28,7 +29,6 @@ use Slim\Http\Response; use SrcCore\controllers\AuthenticationController; use SrcCore\controllers\LanguageController; use SrcCore\controllers\PasswordController; -use SrcCore\controllers\UrlController; use SrcCore\models\AuthenticationModel; use SrcCore\models\CoreConfigModel; use SrcCore\models\PasswordModel; @@ -760,6 +760,17 @@ class UserController return $response->withStatus(204); } + public function getManageableGroupsREST(Request $request, Response $response) + { + if (!PrivilegeController::hasPrivilege(['userId' => $GLOBALS['id'], 'privilege' => 'manage_users'])) { + return $response->withStatus(403)->withJson(['errors' => 'Privilege forbidden']); + } + + $manageableGroups = UserController::getManageableGroups(['userId' => $GLOBALS['id']]); + + return $response->withStatus(200)->withJson(['groups' => $manageableGroups]); + } + public static function getUserInformationsById(array $args) { ValidatorModel::notEmpty($args, ['id']); @@ -802,4 +813,28 @@ class UserController return $user; } + + public static function getManageableGroups(array $args) + { + ValidatorModel::notEmpty($args, ['userId']); + ValidatorModel::intVal($args, ['userId']); + + if (PrivilegeController::hasPrivilege(['userId' => $args['userId'], 'privilege' => 'manage_groups'])) { + $groups = GroupModel::get(['select' => ['id']]); + $groups = array_column($groups, 'id'); + return $groups; + } + + $groups = UserGroupModel::get(['select' => ['group_id'], 'where' => ['user_id = ?'], 'data' => [$args['userId']]]); + + $manageableGroups = []; + foreach ($groups as $group) { + $privilege = GroupPrivilegeModel::getPrivileges(['select' => ['parameters'], 'where' => ['group_id = ?', 'privilege = ?'], 'data' => [$group['group_id'], 'manage_users']]); + $parameters = empty($privilege[0]['parameters']) ? [] : json_decode($privilege[0]['parameters'], true); + $currentGroups = $parameters['authorized'] ?? []; + $manageableGroups = array_merge($manageableGroups, $currentGroups); + } + + return array_unique($manageableGroups); + } } -- GitLab