-<?php
-// vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4:
-// +--------------------------------------------------------------------+
-// | SAMURAI - Samurai_Lib |
-// +--------------------------------------------------------------------+
-// | Sistema de Administracion y Matenimiento de Usuarios Relativo A |
-// | Intranet |
-// | Ministerio de Economía |
-// +--------------------------------------------------------------------+
-// | Creado: lun mar 10 ART 2003 |
-// | Autor: Martin Marrese <mmarre@mecon.gov.ar> |
-// +--------------------------------------------------------------------+
-//
-// $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 <llucar@mecon.gov.ar>
- * 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;
- }
-
-}
-
-?>