]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
baculum: Add restricting resources in objects overview endpoint
authorMarcin Haba <marcin.haba@bacula.pl>
Thu, 5 Oct 2023 06:12:37 +0000 (08:12 +0200)
committerMarcin Haba <marcin.haba@bacula.pl>
Thu, 2 Nov 2023 07:33:54 +0000 (08:33 +0100)
gui/baculum/protected/API/Modules/ObjectManager.php
gui/baculum/protected/API/Pages/API/ObjectsOverview.php

index 4acb74dd61a25aa9aa6735f54ee7aafcbaeda487..ee2964ead4d46f09b1814a1004c4df433cee7ba2 100644 (file)
@@ -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();
index 90cce1d13aefd25867fb7bfadac1a1d7d1258ff7..6c11c6b00fc6cb8ef31c13b2ffca861da6dc301b 100644 (file)
@@ -339,6 +339,7 @@ class ObjectsOverview extends BaculumAPIServer {
                }
 
                $objects = $this->getModule('object')->getObjectsOverview(
+                       $this->director,
                        $general_params,
                        $object_params,
                        $limit,