From 63033b5023550a8c4a1bd4d2f8369c70a4073167 Mon Sep 17 00:00:00 2001 From: Trixocom Date: Tue, 30 Jun 2026 09:39:34 -0300 Subject: [PATCH] ACL: add optional per-user monitor extensions (acl_user.monitorexten) Adds acl_user.monitorexten plus getUserMonitorExtensions()/setUserMonitorExtensions() in paloACL so a user can be scoped to a group of extensions in the recordings monitor. Backward compatible: empty/missing column keeps classic behaviour. Bumps release 3 -> 4. --- framework/html/libs/paloSantoACL.class.php | 55 +++++++++++++++++++++ framework/setup/db/install/acl/1_schema.sql | 2 +- issabel-framework.spec | 5 +- 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/framework/html/libs/paloSantoACL.class.php b/framework/html/libs/paloSantoACL.class.php index a7f6aea..7c22e7b 100644 --- a/framework/html/libs/paloSantoACL.class.php +++ b/framework/html/libs/paloSantoACL.class.php @@ -895,6 +895,61 @@ function setUserExtension($username, $extension) return TRUE; } + /** + * Devuelve la lista de extensiones que un usuario puede monitorear en el + * módulo de grabaciones (monitoring). Se almacena en acl_user.monitorexten + * como una lista separada por comas. Si la columna no existe (instalación + * sin migrar) o está vacía, devuelve un arreglo vacío y el módulo cae al + * comportamiento clásico (sólo la extensión propia del usuario). + * + * @param string $username Username del usuario + * + * @return array arreglo de extensiones (strings), posiblemente vacío + */ + function getUserMonitorExtensions($username) + { + $this->errMsg = ''; + $extens = array(); + if (is_null($username) || $username === '') return $extens; + $result = $this->_DB->getFirstRowQuery( + 'SELECT monitorexten FROM acl_user WHERE name = ?', FALSE, array($username)); + if (!is_array($result) || count($result) <= 0) { + // La columna puede no existir en instalaciones que no migraron; + // se ignora silenciosamente para preservar el comportamiento clásico. + return $extens; + } + $raw = $result[0]; + if (!is_null($raw) && trim($raw) != '') { + foreach (explode(',', $raw) as $e) { + $e = trim($e); + if ($e != '') $extens[] = $e; + } + } + return $extens; + } + + /** + * Asigna la lista de extensiones a monitorear de un usuario existente. + * + * @param string $username Username del usuario + * @param string $list lista separada por comas (NULL/'' para limpiar) + * + * @return boolean VERDADERO en éxito, FALSO en error + */ + function setUserMonitorExtensions($username, $list) + { + $this->errMsg = ''; + if (is_null($list) || trim($list) == '') $list = NULL; + $r = $this->_DB->genQuery( + 'UPDATE acl_user SET monitorexten = ? WHERE name = ?', + array($list, $username)); + if (!$r) { + $this->errMsg = $this->_DB->errMsg; + return FALSE; + } + return TRUE; + } + /** * Procedimiento para obtener el is del recurso dado su nombre. * diff --git a/framework/setup/db/install/acl/1_schema.sql b/framework/setup/db/install/acl/1_schema.sql index 266e18e..2821f7d 100755 --- a/framework/setup/db/install/acl/1_schema.sql +++ b/framework/setup/db/install/acl/1_schema.sql @@ -11,7 +11,7 @@ CREATE TABLE acl_membership ( id_group INTEGER NOT NULL default '0' ); INSERT INTO "acl_membership" VALUES(1,1,1); -CREATE TABLE acl_user (id INTEGER PRIMARY KEY, name varchar(50), description varchar(180), md5_password varchar(50), extension varchar(20)); +CREATE TABLE acl_user (id INTEGER PRIMARY KEY, name varchar(50), description varchar(180), md5_password varchar(50), extension varchar(20), monitorexten varchar(255)); INSERT INTO "acl_user" VALUES(1,'admin',NULL,'06a581ba2ad4fa0d11127e1a27dbfa1f',NULL); CREATE TABLE acl_user_permission (id INTEGER PRIMARY KEY, id_action int(11), id_user int(11), id_resource int(11)); CREATE TABLE acl_resource (id INTEGER PRIMARY KEY, name varchar(50), description varchar(180)); diff --git a/issabel-framework.spec b/issabel-framework.spec index 1d5df6a..0a1f0de 100644 --- a/issabel-framework.spec +++ b/issabel-framework.spec @@ -2,7 +2,7 @@ Summary: Issabel is a Web based software to administrate a PBX based in open source programs, forked from Elastix Name: issabel-framework Version: 5.0.0 -Release: 3 +Release: 4 License: GPL Vendor: Issabel Foundation Group: Applications/System @@ -423,3 +423,6 @@ rm -rf $RPM_BUILD_ROOT %exclude /var/www/html/themes/tenant %changelog +* Tue Jun 30 2026 Trixocom - 5.0.0-4 +- ACL: optional per-user monitor extensions (acl_user.monitorexten) +