| // +--------------------------------------------------------------------+ // // $Id$ // // +X2C Class 377 :SAMURAI_Perm /** * Chequeador de permisos. Para la libreria de perl: @see perm.epl * * @package SAMURAI * @access public */ class SAMURAI_Perm { /** * 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. * * @var array $permisos * @access protected */ var $_permisos = array(); /** * Sistema usado actualmente. * * @var int $sistema * @access protected */ 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. * * @param int $sistema Sistema. * * @return void * @access public */ function setSistema($sistema) { $this->_sistema = $sistema; } // ~X2C // +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. * @param DB &$db Base de datos a usar. * * @return void * @access public */ function SAMURAI_Perm($login, $sistema, &$db) // ~X2C { $this->_sistema = $sistema; $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 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 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 */ function tiene() // ~X2C { $args = func_get_args(); if (!$args) { return (boolean) @$this->_permisos[$this->_sistema]; } else { foreach ($args as $arg) { if (is_array($arg)) { if (@array_intersect($arg, $this->_permisos[$this->_sistema])) { return true; } } else { if (@in_array($arg, $this->_permisos[$this->_sistema])) { return true; } } } return false; } } // -X2C // +X2C Operation 385 /** * Obtiene una lista de permisos. Si se especifica un sistema, obtiene la lista de permisos para ese sistema. * * @param int $sistema Sistema del cual obtener la lista de permisos. * * @return array * @access public */ function getPermisos($sistema = null) // ~X2C { $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 ?>