*
* Libreria para le manejo de los permisos. Basada en la lase HE_Perm de
* Leandro Lucarella <llucar@mecon.gov.ar>
+ * Las funciones de acceso publico se llaman igual que en Horas Extras
*
* @package SA_Perm
* @version $Rev$
*/
class SA_Perm extends PEAR {
- /**
- * Identificacion del usuario.
- *
- * @var int(11) nrodoc
- */
- var $nrodoc;
-
/**
* Login del usuario
*
* @var string login
*/
- var $login;
+ var $login;
/**
- * Consultas SQL.
+ * Permisos del usuario en el sistema.
*
- * @var array SQL
+ * @var array permisos
*/
- var $SQL;
+ var $permisos;
/**
*
* @var $sistema
*/
- var $sistema
+ var $sistema;
/**
- * Constructor.
+ * Constructor.
+ *
+ * El login del usuario lo toma del udat
*
- * @param int $nrodoc Numero de documento del usuario.
- * @param string $login Login del usuario de la forma <usuario>@<organismo>
* @param int $sistema Identificacion del sistema (id_sistema)
*
* @return bool true si esta nrodoc, false en caso contrario
*
* @access public
*/
- function SA_Perm($nrodoc = null, $login = null, $sistema = null)
+ function SA_Perm($sistema, $login)
{
$creacion = false; //Asumo que va a fallar
- if (isset($nrodoc) && isset($sistema) && isset($login)) {
- $this->nrodoc = $nrodoc;
- $this->sistema = $sistema;
- $this->login = $login;
- $this->SQL = include 'samurai_lib_sql.inc';
- $this->DB = $this->_SA_conectarDB();
- $creacion = true;
+ if (isset($sistema)) {
+ $this->sistema = $sistema;
+ $this->login = $login;
+ $this->DB = $this->_conectarDB();
+ $this->permisos = $this->_obtenerPermisos();
+ $creacion = true;
}
return $creacion;
}
*
* 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
+ * permisos, en caso contrario devuelve false. Es de parametros
+ * variables, y siempre necesita al menos UN parametro
*
- * @param array permisos
+ * @param array permisos buscados
*
* @return bool
*
* @access public
*/
- function SA_verifPerm ()
+ function tiene()
{
- $args = func_get_args();
- $result = true; //Asumo que no va a fallar
-
+ $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;
+ $result = false; //Siempre se debe pasar al menos un permiso a buscar
}
else {
- //Obtengo los perfiles de un usuario {{{
- $sql = $this->SQL['obtener_perfil_usuario'];
- $re = $this->DB->prepare($sql);
- $re = $this->DB->execute($this->login, $this->sistema);
- // }}}
-
- // Por cada perfil, busco sus permisos y los comparo con los pasados
- // por el argumento {{{
- while ($res = $re->fetchRow(DB_FETCHMODE_ASSOC)) {
- $sql = $this->SQL['obtener_permisos_perfil'];
- $re = $this->DB->prepare($sql);
- $re = $this->DB->execute($res['id_perfil'], $this->sistema);
- //TODO: Verificar que este tomando bien los datos de la base
+ if (count(array_diff($args, $this->permisos))){
+ $result = false;
}
- /// }}}
}
+
return $result;
}
+ //##TODO##: Crear la funcion tieneO simil tiene solo que chequea por or
+
+ /**
+ * Obtiene los permisos de un usuario de la base
+ *
+ * @return array con los permisos del usuario
+ *
+ * @access private
+ */
+ function _obtenerPermisos()
+ {
+ $consultas = 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 muestro
+ die ($this->permisos->getMessage());
+ }
+ return $result;
+ }
+
/**
* Conecta el objeto a la base de datos, segun lo especificado
- * en samurai_lib_dc_conf.inc.
+ * en samurai_lib_db_conf.inc.
*
* @return db conexion hecha
*
* @access private
*/
- function _SA_conectarDB ()
+ function _conectarDB()
{
$datos = include 'samurai_lib_db_conf.inc';
$dsn = $datos['db_type']."://".$datos['db_user'].":".$datos['db_pass']."@".$datos['db_host']."/".$datos['db_name'];