2 // vim: set binary expandtab tabstop=4 shiftwidth=4:
3 // +--------------------------------------------------------------------+
4 // | Ministerio de Economía |
6 // +--------------------------------------------------------------------+
7 // | This file is part of SAMURAI. |
9 // | SAMURAI is free software; you can redistribute it and/or modify |
10 // | it under the terms of the GNU General Public License as published |
11 // | by the Free Software Foundation; either version 2 of the License, |
12 // | or (at your option) any later version. |
14 // | SAMURAI is distributed in the hope that it will be useful, but |
15 // | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
17 // | General Public License for more details. |
19 // | You should have received a copy of the GNU General Public License |
20 // | along with SAMURAI; if not, write to the Free Software Foundation, |
21 // | Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
22 // +--------------------------------------------------------------------+
23 // | Creado: Fri Jul 18 16:05:22 2003 |
24 // | Autor: Leandro Lucarella <llucar@mecon.gov.ar> |
25 // +--------------------------------------------------------------------+
30 // +X2C Class 377 :SAMURAI_Perm
32 * Chequeador de permisos.
33 Para la libreria de perl:
41 * Permisos. Es un array asociativo, donde la clave es un identificador de sistema y el valor un array con los permisos que tiene para ese sistema.
43 * @var array $permisos
46 var $_permisos = array();
49 * Sistema usado actualmente.
57 * Base de datos a usar en las conexiones.
65 * Observaciones de los permisos.
67 * @var array $observaciones
70 var $_observaciones = array();
75 * @param int $sistema Sistema.
80 function setSistema($sistema)
82 $this->_sistema = $sistema;
90 Para la libreria de perl:
93 * @param int $login Login del usuario para el cual obtener los permisos.
94 * @param int $sistema Sistema con el cual se va a trabajar.
95 * @param DB &$db Base de datos a usar.
100 function SAMURAI_Perm($login, $sistema, &$db) // ~X2C
102 $this->_sistema = $sistema;
104 SELECT DISTINCT psu.id_sistema AS sistema, pps.id_permiso AS permiso
105 FROM samurai.perfil_sist_usuario AS psu, samurai.perm_perfil_sist AS pps
106 WHERE psu.login = '.$db->quote($login).' AND psu.id_perfil = pps.id_perfil
107 AND psu.id_sistema = pps.id_sistema';
108 foreach ($db->getAll($query, DB_FETCHMODE_ASSOC) as $row) {
109 $this->_permisos[$row['sistema']][] = $row['permiso'];
115 // +X2C Operation 381
117 * Verifica si tiene un permiso.
118 Se puede pasar parametros variables con un identificador de permiso o un array, por ejemplo: $perm->tiene(1, 4, array(2, 5, 67), 12); Si tiene algun permiso devuelve true.
119 Si no se pasa ningun parametro ($perm->tiene()), devuelve true si tiene un permiso (al menos uno) en el sistema actual.
125 function tiene() // ~X2C
127 $args = func_get_args();
129 return (boolean) @$this->_permisos[$this->_sistema];
131 foreach ($args as $arg) {
132 if (is_array($arg)) {
133 if (@array_intersect($arg, $this->_permisos[$this->_sistema])) {
137 if (@in_array($arg, $this->_permisos[$this->_sistema])) {
148 // +X2C Operation 385
150 * Obtiene una lista de permisos. Si se especifica un sistema, obtiene la lista de permisos para ese sistema.
152 * @param int $sistema Sistema del cual obtener la lista de permisos.
157 function getPermisos($sistema = null) // ~X2C
159 $sistema = is_null($sistema) ? $this->_sistema : $sistema;
160 return @$this->_permisos[$sistema] ? $this->_permisos[$sistema] : array();
164 // +X2C Operation 388
169 function chequear() // ~X2C
171 $args = func_get_args();
172 if (!call_user_func_array(array($this, 'tiene'), $args)) {
173 include 'MECON/includes/no_autorizado.html';
179 // +X2C Operation 391
181 * Obtiene las observaciones de un permiso para un sistema.
183 * @param int $perm Obtiene las observaciones de un permiso para un sistema.
184 * @param int $sistema Sistema al cual pertenecen los permisos.
189 function getObservaciones($perm, $sistema = null) // ~X2C
191 $sistema = is_null($sistema) ? $this->_sistema : $sistema;
192 if (!@is_array($this->_observaciones[$sistema][$perm])) {
193 $this->_observaciones[$sistema][$perm] = array();
195 SELECT ps.observaciones AS observaciones
196 FROM samurai.perm_sist AS ps
197 WHERE ps.id_permiso = '.$this->_db->quote($perm).'
198 AND ps.id_sistema = '.$this->_db->quote($sistema);
199 foreach ($this->_db->getAll($query, DB_FETCHMODE_ASSOC) as $row) {
200 $this->_observaciones[$sistema][$perm][] = $row['observaciones'];
203 return $this->_observaciones[$sistema][$perm];
208 * Obtiene los datos de los usuarios que tienen el permiso indicado.
210 * @param db $db Base de datos.
211 * @param int $sistema Identificador del sistema al que pertenece el permiso.
212 * @param int $perm Identificador del permiso.
213 * @param string $obs Observación de la asignación del permiso.
219 function getUsuariosPermiso (&$db, $sistema, $perm, $obs = null)
221 $sql = "SELECT PSU.login,
223 LEFT (P.desc_perfil, LOCATE(' ', P.desc_perfil)) desc_perfil
224 FROM samurai.perfil_sist_usuario AS PSU,
225 usuario.Usuario AS U,
226 samurai.perm_perfil_sist AS PPS,
228 WHERE U.login = PSU.login AND
229 PSU.id_perfil = PPS.id_perfil AND
230 PPS.id_perfil = P.id_perfil AND
231 PSU.id_sistema = $sistema AND
232 PPS.id_permiso = $perm ";
234 $sql.= (is_null($obs))?
235 " ORDER BY U.nombre":
236 " AND PPS.observaciones = '". $obs. "' ORDER BY U.nombre";
238 return $db->getAll($sql);
242 } // -X2C Class :SAMURAI_Perm