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