]> git.llucax.com Git - mecon/samurai.git/blob - lib/Samurai/Perm.php
Se agrega SAMURAI lib (o un primer intento).
[mecon/samurai.git] / lib / Samurai / Perm.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  *   Perm/sql_Conf.php -> Consultas SQL utilizadas por el objeto
33  *   Perm/db_Conf.php  -> Datos de la conexion con la base de datos
34  *
35  * @package Samurai
36  * @version $Rev$
37  * @author  $Author$
38  */
39
40 class SA_Perm extends PEAR {
41     
42     /**
43      * Login del usuario
44      *
45      * @var string 
46      */
47     var $login;
48     
49     /**
50      * Permisos del usuario en el sistema.
51      *
52      * @var array
53      */     
54     var $permisos;
55
56
57     /**
58      * Conexion a la Base de Datos .
59      *
60      * @var object DB 
61      */     
62     var $DB;
63
64     /**
65      * Identificacion del sistema
66      *
67      * @var int
68      */
69     var $sistema;
70     
71     /**
72      * Constructor. 
73      *
74      * El login del usuario lo toma del udat
75      *
76      * @param int    $sistema Identificacion del sistema (id_sistema)
77      * @param string $login   Identificacion del usuario (udat{user}
78      *
79      * @access public
80      */
81     function SA_Perm($sistema, $login)
82     {          
83         $this->PEAR();
84         $this->sistema  = $sistema;
85             $this->login    = $login;
86             $this->DB       = $this->_conectarDB();
87             $this->permisos = $this->_obtenerPermisos();
88     }
89
90     /**
91      * Verifica los permisos de un usuario
92      * 
93      * Compara los permisos que tiene un usuario en relacion a los 
94      * pasados como parametro. Devuelve true si cumple con todos los
95      * permisos, en caso contrario devuelve false. Es de parametros
96      * variables, y siempre necesita al menos UN parametro
97      *
98      * @param array $permisos Permisos que se buscan
99      *
100      * @return bool
101      *
102      * @access public
103      */
104     function tiene() 
105     {
106         $args   = func_get_args(); //Obtengo los permisos que me pasaron como argumento
107         $result = true;           //Asumo que no va a fallar
108         if (!count($args)) {     
109             $result = false;    //Siempre se debe pasar al menos un permiso a buscar
110         }
111         else {
112             if (count(array_diff($args, $this->permisos))){
113                 $result = false;
114             }
115         }           
116         return $result; 
117     }
118
119     /**
120      * Verifica los permisos de un usuario
121      * 
122      * Compara los permisos que tiene un usuario en relacion a los 
123      * pasados como parametro. Devuelve true si cumple con alguno de los
124      * permisos, en caso contrario devuelve false. Es de parametros
125      * variables, y siempre necesita al menos UN parametro
126      *
127      * @param array $permisos Permisos que se buscan
128      *
129      * @return bool
130      *
131      * @access public
132      */
133     function tieneO() 
134     {
135         $args   = func_get_args(); //Obtengo los permisos que me pasaron como argumento
136         $result = true;           //Asumo que no va a fallar
137         if (!count($args)) {     //Siempre se debe pasar al menos un permiso a buscar
138             $result = false;
139         }
140         else {
141             if (count(array_diff($args, $this->permisos)) >= count($args)) { 
142                 $result = false;           
143             }
144         }
145         return $result;
146     }
147
148     /**
149      * Verifica los permisos de un usuario
150      * 
151      * Compara los permisos que tiene un usuario en relacion a los 
152      * pasados como parametro. Devuelve un array con aquellos permisos que
153      * el usuario tiene. Funciona similar a tieneO solo que devuelve un array.
154      * Es de parametros variables, y siempre necesita al menos UN parametro
155      *
156      * @param array $permisos Permisos que se buscan
157      *
158      * @return array Permisos que tiene el usuario pasados por parametro, o 'ERROR' en caso contrario
159      *
160      * @access public
161      */
162     function tieneODevol () 
163     {
164         $args = func_get_args(); //Obtengo los permisos que me pasaron como argumento
165         $result = array();
166
167         if (!count($args)) {
168            $result['0'] = 'ERROR'; //Siempre se debe pasar al menos un permiso a buscar
169         }
170         else {
171             $result = array_intersect($args, $this->permisos);
172         }       
173         return $result;
174     }   
175
176     /**
177      * Verifica los permisos de un usuario
178      * 
179      * Compara un permiso pasado por parametro con los que tiene el usuario 
180      * en la base. Devuelve true si tiene el permiso, false en otro caso
181      *
182      * @param int permiso buscado
183      *
184      * @return bool
185      *
186      * @access public
187      */
188     function tieneUn($permiso) 
189     {
190        $result = true;  //Asumo que no va a fallar
191        if (!in_array($permiso, $this->permisos)) { //Si no esta en el array, no tiene el permiso
192                $result = false;
193            }
194        return $result;       
195     }
196
197     /**
198      * Devuelve los permisos de un usuario
199      * 
200      * Devuelve un array con los permisos que posee el usuario en el sistema
201      * que se paso como parametro al constructor. Devuelve un array.
202      *
203      * @return array
204      *
205      * @access public
206      */
207     function listaPermisos() 
208     {
209         return $this->permisos;       
210     }
211
212
213
214 //HASTA ACA FUNCIONES PUBLICAS
215 //DESDE ACA FUNCIONES PRIVADAS
216
217     /**
218      * Obtiene los permisos de un usuario de la base
219      *
220      * @return array permisos del usuario
221      * 
222      * @access private
223      */
224     function _obtenerPermisos() 
225     {   
226         $consultas = include 'Perm/sql_Conf.php';
227         $sql       = $consultas['obtener_p_p_completo'];
228         $sql_array = array ('0' => $this->sistema, '1' => $this->login);
229         $result    = $this->DB->getCol($sql,0, $sql_array);
230         if (DB::isError($this->permisos)) {     //En caso de error en la consulta, que lo muestre
231             die ($this->permisos->getMessage());
232         }
233         return $result;
234     }
235
236     /**
237      * Conecta el objeto a la base de datos
238      *
239      * @return db conexion con la base
240      * 
241      * @access private
242      */    
243     function _conectarDB()
244     {
245         $datos = include 'Perm/db_Conf.php';
246         $dsn   = $datos['db_type']."://".$datos['db_user'].":".$datos['db_pass']."@".$datos['db_host']."/".$datos['db_name'];   
247         $db    = DB::connect($dsn, true); //Quiero que la conexion sea persistente
248         if (DB::isError($db)) {          //En caso de error en la conexion que la muestre
249             die($db->getMessage());
250         }
251         return $db;
252     }
253
254 }
255
256 ?>