]> git.llucax.com Git - mecon/meconlib.git/blob - samurai_lib/src/Samurai/Perm.php
Reacomodacion de directorios, nombres de archivos, etc.
[mecon/meconlib.git] / samurai_lib / src / 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 un permiso pasado por parametro con los que tiene el usuario 
153      * en la base. Devuelve true si tiene el permiso, false en otro caso
154      *
155      * @param int permiso buscado
156      *
157      * @return bool
158      *
159      * @access public
160      */
161     function tieneUn($permiso) 
162     {
163        $result = true;  //Asumo que no va a fallar
164        if (!isset($permiso)) { //Tiene que pasar un permiso si o si
165            $result = false;
166        }
167        else {
168            if (!in_array($permiso, $this->permisos)) { //Si no esta en el array, no tiene el permiso
169                $result = false;
170            }
171        }
172        return $result;       
173     }
174
175 //HASTA ACA FUNCIONES PUBLICAS
176 //DESDE ACA FUNCIONES PRIVADAS
177
178     /**
179      * Obtiene los permisos de un usuario de la base
180      *
181      * @return array permisos del usuario
182      * 
183      * @access private
184      */
185     function _obtenerPermisos() 
186     {   
187         $consultas = include 'Perm/sql_Conf.php';
188         $sql       = $consultas['obtener_p_p_completo'];
189         $sql_array = array ('0' => $this->sistema, '1' => $this->login);
190         $result    = $this->DB->getCol($sql,0, $sql_array);
191         if (DB::isError($this->permisos)) {     //En caso de error en la consulta, que lo muestre
192             die ($this->permisos->getMessage());
193         }
194         return $result;
195     }
196
197     /**
198      * Conecta el objeto a la base de datos
199      *
200      * @return db conexion con la base
201      * 
202      * @access private
203      */    
204     function _conectarDB()
205     {
206         $datos = include 'include/samurai_lib_db_conf.inc';
207         $dsn   = $datos['db_type']."://".$datos['db_user'].":".$datos['db_pass']."@".$datos['db_host']."/".$datos['db_name'];   
208         $db    = DB::connect($dsn, true); //Quiero que la conexion sea persistente
209         if (DB::isError($db)) {
210             die($db->getMessage());
211         }
212         return $db;
213     }
214
215 }
216 // }}} Fin Clase
217
218 ?>