| // +--------------------------------------------------------------------+ // // $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 * samurai_lib_sql.inc -> Consultas SQL utilizadas por el objeto * samurai_lib_db_conf.inc -> Datos de la conexion con la base de datos * * @package SA_Perm * @version $Rev$ * @author $Author$ */ // Comienzo Clase {{{ class SA_Perm extends PEAR { /** * Login del usuario * * @var string login */ var $login; /** * Permisos del usuario en el sistema. * * @var array permisos */ var $permisos; /** * Conexion a la Base de Datos . * * @var $DB */ var $DB; /** * Identificacion del sistema * * @var $sistema */ 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) { if (isset($sistema) && isset($login)) { $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 buscados * * @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 buscados * * @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 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 (!isset($permiso)) { //Tiene que pasar un permiso si o si $result = false; } else { if (!in_array($permiso, $this->permisos)) { //Si no esta en el array, no tiene el permiso $result = false; } } return $result; } //HASTA ACA FUNCIONES PUBLICAS //DESDE ACA FUNCIONES PRIVADAS /** * Obtiene los permisos de un usuario de la base * * @return array con los permisos del usuario * * @access private */ function _obtenerPermisos() { $consultas = include 'include/samurai_lib_sql.inc'; $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, segun lo especificado * en samurai_lib_db_conf.inc. * * @return db conexion con la base * * @access private */ function _conectarDB() { $datos = include 'include/samurai_lib_db_conf.inc'; $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)) { die($db->getMessage()); } return $db; } } // }}} Fin Clase ?>