]> git.llucax.com Git - mecon/meconlib.git/blob - samurai_lib/src/samurai_lib.php
Nombre de la Libreria: samurai_lib
[mecon/meconlib.git] / samurai_lib / src / samurai_lib.php
1 <?php
2 // vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4:
3 // +--------------------------------------------------------------------+
4 // |                    SAMURAI  - Samurai_Lib                          |
5 // +--------------------------------------------------------------------+
6 // |   Sistema de Administracion y Matenimiento de Usuarios Relativo A  |
7 // |                             Intranet                               |
8 // |                      Ministerio de Economía                        |
9 // +--------------------------------------------------------------------+
10 // | Creado: lun mar 10 ART 2003                                        |
11 // | Autor:  Martin Marrese <mmarre@mecon.gov.ar>                       |
12 // +--------------------------------------------------------------------+
13 //
14 // $Id$
15 //
16 // $URL$
17 // $Rev$
18 // $Date$
19 // $Author$
20 //
21
22 require_once 'PEAR.php';
23 require_once 'DB.php';
24
25 /**
26  * Manejo de permisos.
27  *
28  * Libreria para le manejo de los permisos. Basada en la lase HE_Perm de 
29  * Leandro Lucarella <llucar@mecon.gov.ar>
30  * Las funciones de acceso publico se llaman igual que en HE_Perm
31  * Archivos Requeridos
32  *   samurai_lib_sql.inc     -> Consultas SQL utilizadas por el objeto
33  *   samurai_lib_db_conf.inc -> Datos de la conexion con la base de datos
34  *
35  * @package SA_Perm
36  * @version $Rev$
37  * @author  $Author$
38  */
39
40 // Comienzo Clase {{{ 
41 class SA_Perm extends PEAR {
42     
43     /**
44      * Login del usuario
45      *
46      * @var string login
47      */
48     var $login;
49     
50     /**
51      * Permisos del usuario en el sistema.
52      *
53      * @var array  permisos
54      */     
55     var $permisos;
56
57
58     /**
59      * Conexion a la Base de Datos .
60      *
61      * @var $DB
62      */     
63     var $DB;
64
65     /**
66      * Identificacion del sistema
67      *
68      * @var $sistema
69      */
70     var $sistema;
71     
72     /**
73      * Constructor. 
74      *
75      * El login del usuario lo toma del udat
76      *
77      * @param int    $sistema Identificacion del sistema (id_sistema)
78      * @param string $login   Identificacion del usuario (udat{user}
79      *
80      * @access public
81      */
82     function SA_Perm($sistema, $login)
83     {        
84         if (isset($sistema) && isset($login)) { 
85             $this->sistema  = $sistema;
86             $this->login    = $login;
87             $this->DB       = $this->_conectarDB();
88             $this->permisos = $this->_obtenerPermisos();
89         }
90     }
91
92     /**
93      * Verifica los permisos de un usuario
94      * 
95      * Compara los permisos que tiene un usuario en relacion a los 
96      * pasados como parametro. Devuelve true si cumple con todos los
97      * permisos, en caso contrario devuelve false. Es de parametros
98      * variables, y siempre necesita al menos UN parametro
99      *
100      * @param array permisos buscados
101      *
102      * @return bool
103      *
104      * @access public
105      */
106     function tiene() 
107     {
108         $args   = func_get_args(); //Obtengo los permisos que me pasaron como argumento
109         $result = true;          //Asumo que no va a fallar
110         if (!count($args)) {
111             $result = false;     //Siempre se debe pasar al menos un permiso a buscar
112         }
113         else {
114             if (count(array_diff($args, $this->permisos))){
115                 $result = false;
116             }
117         }
118            
119         return $result; 
120     }
121
122      /**
123      * Verifica los permisos de un usuario
124      * 
125      * Compara los permisos que tiene un usuario en relacion a los 
126      * pasados como parametro. Devuelve true si cumple con alguno de los
127      * permisos, en caso contrario devuelve false. Es de parametros
128      * variables, y siempre necesita al menos UN parametro
129      *
130      * @param array permisos buscados
131      *
132      * @return bool
133      *
134      * @access public
135      */
136     function tieneO() 
137     {
138         $args   = func_get_args(); //Obtengo los permisos que me pasaron como argumento
139         $result = true;           //Asumo que no va a fallar
140         if (!count($args)) {      //Siempre se debe pasar al menos un permiso a buscar
141             $result = false;
142         }
143         else {
144             if (count(array_diff($args, $this->permisos)) >= count($args)) { 
145                 $result = false;
146             }
147         }
148         return $result;
149     }
150
151      /**
152      * Verifica los permisos de un usuario
153      * 
154      * Compara un permiso pasado por parametro con los que tiene el usuario 
155      * en la base. Devuelve true si tiene el permiso, false en otro caso
156      *
157      * @param int permiso buscado
158      *
159      * @return bool
160      *
161      * @access public
162      */
163     function tieneUn($permiso) 
164     {
165        $result = true;  //Asumo que no va a fallar
166        if (!isset($permiso)) { //Tiene que pasar un permiso si o si
167            $result = false;
168        }
169        else {
170            if (!in_array($permiso, $this->permisos)) { //Si no esta en el array, no tiene el permiso
171                $result = false;
172            }
173        }
174        return $result;       
175     }
176
177 //HASTA ACA FUNCIONES PUBLICAS
178 //DESDE ACA FUNCIONES PRIVADAS
179
180     /**
181      * Obtiene los permisos de un usuario de la base
182      *
183      * @return array con los permisos del usuario
184      * 
185      * @access private
186      */
187     function _obtenerPermisos() 
188     {   
189         $consultas = include 'include/samurai_lib_sql.inc';
190         $sql       = $consultas['obtener_p_p_completo'];
191         $sql_array = array ('0' => $this->sistema, '1' => $this->login);
192         $result    = $this->DB->getCol($sql,0, $sql_array);
193         if (DB::isError($this->permisos)) {     //En caso de error en la consulta, que lo muestre
194             die ($this->permisos->getMessage());
195         }
196         return $result;
197     }
198
199     /**
200      * Conecta el objeto a la base de datos, segun lo especificado
201      * en samurai_lib_db_conf.inc.
202      *
203      * @return db conexion con la base
204      * 
205      * @access private
206      */    
207     function _conectarDB()
208     {
209         $datos = include 'include/samurai_lib_db_conf.inc';
210         $dsn   = $datos['db_type']."://".$datos['db_user'].":".$datos['db_pass']."@".$datos['db_host']."/".$datos['db_name'];   
211         $db    = DB::connect($dsn, true); //Quiero que la conexion sea persistente
212         if (DB::isError($db)) {
213             die($db->getMessage());
214         }
215         return $db;
216     }
217
218 }
219 // }}} Fin Clase
220
221 ?>