X-Git-Url: https://git.llucax.com/mecon/samurai.git/blobdiff_plain/1ecc9798cbde319c7c4168c14f613670accb9982..325ae567c29fec68d2be78712b3d85b2dc41a9e8:/lib/SAMURAI/Perm.php?ds=inline diff --git a/lib/SAMURAI/Perm.php b/lib/SAMURAI/Perm.php index ba8ccf9..e4923f3 100644 --- a/lib/SAMURAI/Perm.php +++ b/lib/SAMURAI/Perm.php @@ -30,6 +30,8 @@ // +X2C Class 377 :SAMURAI_Perm /** * Chequeador de permisos. +Para la libreria de perl: +@see perm.epl * * @package SAMURAI * @access public @@ -51,6 +53,22 @@ class SAMURAI_Perm { */ var $_sistema; + /** + * Base de datos a usar en las conexiones. + * + * @var DB $db + * @access protected + */ + var $_db; + + /** + * Observaciones de los permisos. + * + * @var array $observaciones + * @access protected + */ + var $_observaciones = array(); + /** * Sets Sistema. * @@ -69,6 +87,8 @@ class SAMURAI_Perm { // +X2C Operation 380 /** * Constructor. +Para la libreria de perl: +@see perm.epl * * @param int $login Login del usuario para el cual obtener los permisos. * @param int $sistema Sistema con el cual se va a trabajar. @@ -83,18 +103,21 @@ class SAMURAI_Perm { $query = ' SELECT DISTINCT psu.id_sistema AS sistema, pps.id_permiso AS permiso FROM samurai.perfil_sist_usuario AS psu, samurai.perm_perfil_sist AS pps - WHERE psu.login = '.$db->quote($login).' AND psu.id_perfil = pps.id_perfil;'; + WHERE psu.login = '.$db->quote($login).' AND psu.id_perfil = pps.id_perfil + AND psu.id_sistema = pps.id_sistema'; foreach ($db->getAll($query, DB_FETCHMODE_ASSOC) as $row) { $this->_permisos[$row['sistema']][] = $row['permiso']; } + $this->_db =& $db; } // -X2C // +X2C Operation 381 /** * Verifica si tiene un permiso. -Se puede pasar par?etros variables con un identificador de permiso o un array, por ejemplo: $perm->tiene(1, 4, array(2, 5, 67), 12); Si tiene algn permiso devuelve true. -Si no se pasa ningn p?ametro ($perm->tiene()), devuelve true si tiene un permiso (al menos uno) en el sistema actual. +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. +Si no se pasa ningun parametro ($perm->tiene()), devuelve true si tiene un permiso (al menos uno) en el sistema actual. +@see chequear() * * @return bool * @access public @@ -107,11 +130,11 @@ Si no se pasa ningn p?ametro ($perm->tiene()), devuelve true si tiene un permiso } else { foreach ($args as $arg) { if (is_array($arg)) { - if (array_intersect($arg, @$this->_permisos[$this->_sistema])) { + if (@array_intersect($arg, $this->_permisos[$this->_sistema])) { return true; } } else { - if (in_array($arg, @$this->_permisos[$this->_sistema])) { + if (@in_array($arg, $this->_permisos[$this->_sistema])) { return true; } } @@ -131,13 +154,91 @@ Si no se pasa ningn p?ametro ($perm->tiene()), devuelve true si tiene un permiso * @return array * @access public */ - function getPermisos($sistema = '') // ~X2C + function getPermisos($sistema = null) // ~X2C { - $sistema = $sistema ? $sistema : $this->_sistema; + $sistema = is_null($sistema) ? $this->_sistema : $sistema; return @$this->_permisos[$sistema] ? $this->_permisos[$sistema] : array(); } // -X2C + // +X2C Operation 388 + /** + * @return void + * @access public + */ + function chequear() // ~X2C + { + $args = func_get_args(); + if (!call_user_func_array(array($this, 'tiene'), $args)) { + include 'MECON/includes/no_autorizado.html'; + exit; + } + } + // -X2C + + // +X2C Operation 391 + /** + * Obtiene las observaciones de un permiso para un sistema. + * + * @param int $perm Obtiene las observaciones de un permiso para un sistema. + * @param int $sistema Sistema al cual pertenecen los permisos. + * + * @return array + * @access public + */ + function getObservaciones($perm, $sistema = null) // ~X2C + { + $sistema = is_null($sistema) ? $this->_sistema : $sistema; + if (!@is_array($this->_observaciones[$sistema][$perm])) { + $this->_observaciones[$sistema][$perm] = array(); + $query = ' + SELECT ps.observaciones AS observaciones + FROM samurai.perm_sist AS ps + WHERE ps.id_permiso = '.$this->_db->quote($perm).' + AND ps.id_sistema = '.$this->_db->quote($sistema); + foreach ($this->_db->getAll($query, DB_FETCHMODE_ASSOC) as $row) { + $this->_observaciones[$sistema][$perm][] = $row['observaciones']; + } + } + return $this->_observaciones[$sistema][$perm]; + } + // -X2C + + /** + * Obtiene los datos de los usuarios que tienen el permiso indicado. + * + * @param db $db Base de datos. + * @param int $sistema Identificador del sistema al que pertenece el permiso. + * @param int $perm Identificador del permiso. + * @param string $obs Observación de la asignación del permiso. + * + * @return array + * @access public + * @static + */ + function getUsuariosPermiso (&$db, $sistema, $perm, $obs = null) + { + $sql = "SELECT PSU.login, + U.nombre, + LEFT (P.desc_perfil, LOCATE(' ', P.desc_perfil)) desc_perfil + FROM samurai.perfil_sist_usuario AS PSU, + usuario.Usuario AS U, + samurai.perm_perfil_sist AS PPS, + samurai.perfil AS P + WHERE U.login = PSU.login AND + PSU.id_perfil = PPS.id_perfil AND + PPS.id_perfil = P.id_perfil AND + PSU.id_sistema = $sistema AND + PPS.id_permiso = $perm "; + + $sql.= (is_null($obs))? + " ORDER BY U.nombre": + " AND PPS.observaciones = '". $obs. "' ORDER BY U.nombre"; + + return $db->getAll($sql); + + } + } // -X2C Class :SAMURAI_Perm ?> \ No newline at end of file