]> git.llucax.com Git - mecon/meconlib.git/blob - samurai_lib/php/Samurai/Perm.php
Reacomodamiento de directorios
[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 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 (!in_array($permiso, $this->permisos)) { //Si no esta en el array, no tiene el permiso
165                $result = false;
166            }
167        return $result;       
168     }
169
170 //HASTA ACA FUNCIONES PUBLICAS
171 //DESDE ACA FUNCIONES PRIVADAS
172
173     /**
174      * Obtiene los permisos de un usuario de la base
175      *
176      * @return array permisos del usuario
177      * 
178      * @access private
179      */
180     function _obtenerPermisos() 
181     {   
182         $consultas = include 'Perm/sql_Conf.php';
183         $sql       = $consultas['obtener_p_p_completo'];
184         $sql_array = array ('0' => $this->sistema, '1' => $this->login);
185         $result    = $this->DB->getCol($sql,0, $sql_array);
186         if (DB::isError($this->permisos)) {     //En caso de error en la consulta, que lo muestre
187             die ($this->permisos->getMessage());
188         }
189         return $result;
190     }
191
192     /**
193      * Conecta el objeto a la base de datos
194      *
195      * @return db conexion con la base
196      * 
197      * @access private
198      */    
199     function _conectarDB()
200     {
201         $datos = include 'Perm/db_Conf.php';
202         $dsn   = $datos['db_type']."://".$datos['db_user'].":".$datos['db_pass']."@".$datos['db_host']."/".$datos['db_name'];   
203         $db    = DB::connect($dsn, true); //Quiero que la conexion sea persistente
204         if (DB::isError($db)) {
205             die($db->getMessage());
206         }
207         return $db;
208     }
209
210 }
211 // }}} Fin Clase
212
213 ?>