From: Marcin Haba Date: Thu, 5 Oct 2023 06:12:37 +0000 (+0200) Subject: baculum: Add restricting resources in objects overview endpoint X-Git-Tag: Beta-15.0.1~105 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=43515af12f39ef32ae2faf4584490856fe8a6601;p=thirdparty%2Fbacula.git baculum: Add restricting resources in objects overview endpoint --- diff --git a/gui/baculum/protected/API/Modules/ObjectManager.php b/gui/baculum/protected/API/Modules/ObjectManager.php index 4acb74dd6..ee2964ead 100644 --- a/gui/baculum/protected/API/Modules/ObjectManager.php +++ b/gui/baculum/protected/API/Modules/ObjectManager.php @@ -162,6 +162,7 @@ LEFT JOIN FileSet USING (FileSetId) ' /** * Get object records in overview. * + * @param string $director director name * @param array $general_criteria SQL criteria to get object list * @param array $object_criteria SQL object specific criteria to get object list * @param mixed $limit_val result limit value @@ -170,7 +171,7 @@ LEFT JOIN FileSet USING (FileSetId) ' * @param string $sort_order sort order (asc - ascending, desc - descending) * @return array object record list or empty list if no object found */ - public function getObjectsOverview($general_criteria = [], $object_criteria = [], $limit_val = null, $offset_val = 0, $sort_col = 'endtime', $sort_order = 'DESC') { + public function getObjectsOverview($director, $general_criteria = [], $object_criteria = [], $limit_val = null, $offset_val = 0, $sort_col = 'endtime', $sort_order = 'DESC') { $connection = ObjectRecord::finder()->getDbConnection(); $connection->setActive(true); $pdo = $connection->getPdoInstance(); @@ -213,9 +214,61 @@ LEFT JOIN FileSet USING (FileSetId) ' $result = [ 'overview' => [] ]; + + $bconsole = $this->getModule('bconsole'); + + // get allowed job list + $jobs = []; + $jobs_result = $bconsole->bconsoleCommand( + $director, + ['.jobs'], + null, + true + ); + if ($jobs_result->exitcode === 0) { + $jobs = array_filter($jobs_result->output); + } + if (count($jobs) == 0) { + // NOTE: No jobs, no objects, EXIT + return $result; + } + if (!key_exists('Job.Name', $general_criteria)) { + $general_criteria['Job.Name'] = []; + } + $general_criteria['Job.Name'][] = [ + 'operator' => 'IN', + 'vals' => $jobs + ]; + + + + // get allowed client list + $clients = []; + $clients_result = $bconsole->bconsoleCommand( + $director, + ['.client'], + null, + true + ); + if ($clients_result->exitcode === 0) { + $clients = array_filter($clients_result->output); + } + if (count($clients) == 0) { + // NOTE: No clients, no objects, EXIT + return $result; + } + if (!key_exists('Client.Name', $general_criteria)) { + $general_criteria['Client.Name'] = []; + } + $general_criteria['Client.Name'][] = [ + 'operator' => 'IN', + 'vals' => $clients + ]; + $general_where = Database::getWhere($general_criteria, true); $object_crit_all = array_merge($general_criteria, $object_criteria); $object_where = Database::getWhere($object_crit_all); + try { // start transaction $pdo->beginTransaction(); diff --git a/gui/baculum/protected/API/Pages/API/ObjectsOverview.php b/gui/baculum/protected/API/Pages/API/ObjectsOverview.php index 90cce1d13..6c11c6b00 100644 --- a/gui/baculum/protected/API/Pages/API/ObjectsOverview.php +++ b/gui/baculum/protected/API/Pages/API/ObjectsOverview.php @@ -339,6 +339,7 @@ class ObjectsOverview extends BaculumAPIServer { } $objects = $this->getModule('object')->getObjectsOverview( + $this->director, $general_params, $object_params, $limit,