| // +--------------------------------------------------------------------+ // // $Id$ // // $URL$ // $Rev$ // $Date$ // $Author$ // require_once 'PEAR.php'; require_once 'DB.php'; /** * Manejo de permisos. * * Libreria para le manejo de los permisos. Basada en la lase HE_Perm de * Leandro Lucarella * Las funciones de acceso publico se llaman igual que en HE_Perm * Archivos Requeridos * Perm/sql_Conf.php -> Consultas SQL utilizadas por el objeto * Perm/db_Conf.php -> Datos de la conexion con la base de datos * * @package Samurai * @version $Rev$ * @author $Author$ */ class SA_Perm extends PEAR { /** * Login del usuario * * @var string */ var $login; /** * Permisos del usuario en el sistema. * * @var array */ var $permisos; /** * Conexion a la Base de Datos . * * @var object DB */ var $DB; /** * Identificacion del sistema * * @var int */ var $sistema; /** * Constructor. * * El login del usuario lo toma del udat * * @param int $sistema Identificacion del sistema (id_sistema) * @param string $login Identificacion del usuario (udat{user} * * @access public */ function SA_Perm($sistema, $login) { $this->PEAR(); $this->sistema = $sistema; $this->login = $login; $this->DB = $this->_conectarDB(); $this->permisos = $this->_obtenerPermisos(); } /** * Verifica los permisos de un usuario * * Compara los permisos que tiene un usuario en relacion a los * pasados como parametro. Devuelve true si cumple con todos los * permisos, en caso contrario devuelve false. Es de parametros * variables, y siempre necesita al menos UN parametro * * @param array $permisos Permisos que se buscan * * @return bool * * @access public */ function tiene() { $args = func_get_args(); //Obtengo los permisos que me pasaron como argumento $result = true; //Asumo que no va a fallar if (!count($args)) { $result = false; //Siempre se debe pasar al menos un permiso a buscar } else { if (count(array_diff($args, $this->permisos))){ $result = false; } } return $result; } /** * Verifica los permisos de un usuario * * Compara los permisos que tiene un usuario en relacion a los * pasados como parametro. Devuelve true si cumple con alguno de los * permisos, en caso contrario devuelve false. Es de parametros * variables, y siempre necesita al menos UN parametro * * @param array $permisos Permisos que se buscan * * @return bool * * @access public */ function tieneO() { $args = func_get_args(); //Obtengo los permisos que me pasaron como argumento $result = true; //Asumo que no va a fallar if (!count($args)) { //Siempre se debe pasar al menos un permiso a buscar $result = false; } else { if (count(array_diff($args, $this->permisos)) >= count($args)) { $result = false; } } return $result; } /** * Verifica los permisos de un usuario * * Compara los permisos que tiene un usuario en relacion a los * pasados como parametro. Devuelve un array con aquellos permisos que * el usuario tiene. Funciona similar a tieneO solo que devuelve un array. * Es de parametros variables, y siempre necesita al menos UN parametro * * @param array $permisos Permisos que se buscan * * @return array Permisos que tiene el usuario pasados por parametro, o 'ERROR' en caso contrario * * @access public */ function tieneODevol () { $args = func_get_args(); //Obtengo los permisos que me pasaron como argumento $result = array(); if (!count($args)) { $result['0'] = 'ERROR'; //Siempre se debe pasar al menos un permiso a buscar } else { $result = array_intersect($args, $this->permisos); } return $result; } /** * Verifica los permisos de un usuario * * Compara un permiso pasado por parametro con los que tiene el usuario * en la base. Devuelve true si tiene el permiso, false en otro caso * * @param int permiso buscado * * @return bool * * @access public */ function tieneUn($permiso) { $result = true; //Asumo que no va a fallar if (!in_array($permiso, $this->permisos)) { //Si no esta en el array, no tiene el permiso $result = false; } return $result; } /** * Devuelve los permisos de un usuario * * Devuelve un array con los permisos que posee el usuario en el sistema * que se paso como parametro al constructor. Devuelve un array. * * @return array * * @access public */ function listaPermisos() { return $this->permisos; } //HASTA ACA FUNCIONES PUBLICAS //DESDE ACA FUNCIONES PRIVADAS /** * Obtiene los permisos de un usuario de la base * * @return array permisos del usuario * * @access private */ function _obtenerPermisos() { $consultas = include 'Perm/sql_Conf.php'; $sql = $consultas['obtener_p_p_completo']; $sql_array = array ('0' => $this->sistema, '1' => $this->login); $result = $this->DB->getCol($sql,0, $sql_array); if (DB::isError($this->permisos)) { //En caso de error en la consulta, que lo muestre die ($this->permisos->getMessage()); } return $result; } /** * Conecta el objeto a la base de datos * * @return db conexion con la base * * @access private */ function _conectarDB() { $datos = include 'Perm/db_Conf.php'; $dsn = $datos['db_type']."://".$datos['db_user'].":".$datos['db_pass']."@".$datos['db_host']."/".$datos['db_name']; $db = DB::connect($dsn, true); //Quiero que la conexion sea persistente if (DB::isError($db)) { //En caso de error en la conexion que la muestre die($db->getMessage()); } return $db; } } ?>