]> git.llucax.com Git - mecon/samurai.git/blob - lib/SAMURAI/Perm.php
Minor BugFix.
[mecon/samurai.git] / lib / SAMURAI / Perm.php
1 <?php
2 // vim: set binary expandtab tabstop=4 shiftwidth=4:
3 // +--------------------------------------------------------------------+
4 // |                      Ministerio de Economía                        |
5 // |                             SAMURAI                                |
6 // +--------------------------------------------------------------------+
7 // | This file is part of SAMURAI.                                      |
8 // |                                                                    |
9 // | SAMURAI is free software; you can redistribute it and/or modify    |
10 // | it under the terms of the GNU General Public License as published  |
11 // | by the Free Software Foundation; either version 2 of the License,  |
12 // | or (at your option) any later version.                             |
13 // |                                                                    |
14 // | SAMURAI is distributed in the hope that it will be useful, but     |
15 // | WITHOUT ANY WARRANTY; without even the implied warranty of         |
16 // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   |
17 // | General Public License for more details.                           |
18 // |                                                                    |
19 // | You should have received a copy of the GNU General Public License  |
20 // | along with SAMURAI; if not, write to the Free Software Foundation, |
21 // | Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA      |
22 // +--------------------------------------------------------------------+
23 // | Creado: Fri Jul 18 16:05:22 2003                                   |
24 // | Autor:  Leandro Lucarella <llucar@mecon.gov.ar>                    |
25 // +--------------------------------------------------------------------+
26 //
27 // $Id$
28 //
29
30 // +X2C Class 377 :SAMURAI_Perm
31 /**
32  * Chequeador de permisos.
33 Para la libreria de perl: 
34 @see perm.epl
35  *
36  * @package SAMURAI
37  * @access public
38  */
39 class SAMURAI_Perm {
40     /**
41      * Permisos. Es un array asociativo, donde la clave es un identificador de sistema y el valor un array con los permisos que tiene para ese sistema.
42      *
43      * @var    array $permisos
44      * @access protected
45      */
46     var $_permisos = array();
47
48     /**
49      * Sistema usado actualmente.
50      *
51      * @var    int $sistema
52      * @access protected
53      */
54     var $_sistema;
55
56     /**
57      * Base de datos a usar en las conexiones.
58      *
59      * @var    DB $db
60      * @access protected
61      */
62     var $_db;
63
64     /**
65      * Observaciones de los permisos.
66      *
67      * @var    array $observaciones
68      * @access protected
69      */
70     var $_observaciones = array();
71
72     /**
73      * Sets Sistema.
74      *
75      * @param  int $sistema Sistema.
76      *
77      * @return void
78      * @access public
79      */
80     function setSistema($sistema)
81     {
82         $this->_sistema = $sistema;
83     }
84
85     // ~X2C
86
87     // +X2C Operation 380
88     /**
89      * Constructor.
90 Para la libreria de perl: 
91 @see perm.epl
92      *
93      * @param  int $login Login del usuario para el cual obtener los permisos.
94      * @param  int $sistema Sistema con el cual se va a trabajar.
95      * @param  DB &$db Base de datos a usar.
96      *
97      * @return void
98      * @access public
99      */
100     function SAMURAI_Perm($login, $sistema, &$db) // ~X2C
101     {
102         $this->_sistema = $sistema;
103         $query = '
104             SELECT DISTINCT psu.id_sistema AS sistema, pps.id_permiso AS permiso
105             FROM samurai.perfil_sist_usuario AS psu, samurai.perm_perfil_sist AS pps
106             WHERE psu.login = '.$db->quote($login).' AND psu.id_perfil = pps.id_perfil
107             AND psu.id_sistema = pps.id_sistema';
108         foreach ($db->getAll($query, DB_FETCHMODE_ASSOC) as $row) {
109             $this->_permisos[$row['sistema']][] = $row['permiso'];
110         }
111         $this->_db =& $db;
112     }
113     // -X2C
114
115     // +X2C Operation 381
116     /**
117      * Verifica si tiene un permiso.
118 Se puede pasar parametros variables con un identificador de permiso o un array, por ejemplo: $perm->tiene(1, 4, array(2, 5, 67), 12); Si tiene algun permiso devuelve true.
119 Si no se pasa ningun parametro ($perm->tiene()), devuelve true si tiene un permiso (al menos uno) en el sistema actual.
120 @see chequear()
121      *
122      * @return bool
123      * @access public
124      */
125     function tiene() // ~X2C
126     {
127         $args = func_get_args();
128         if (!$args) {
129             return (boolean) @$this->_permisos[$this->_sistema];
130         } else {
131             foreach ($args as $arg) {
132                 if (is_array($arg)) {
133                      if (@array_intersect($arg, $this->_permisos[$this->_sistema])) {
134                         return true;
135                      }
136                 } else {
137                      if (@in_array($arg, $this->_permisos[$this->_sistema])) {
138                         return true;
139                      }
140                 }
141             }
142             return false;
143         }
144     }
145     // -X2C
146
147
148     // +X2C Operation 385
149     /**
150      * Obtiene una lista de permisos. Si se especifica un sistema, obtiene la lista de permisos para ese sistema.
151      *
152      * @param  int $sistema Sistema del cual obtener la lista de permisos.
153      *
154      * @return array
155      * @access public
156      */
157     function getPermisos($sistema = null) // ~X2C
158     {
159         $sistema = is_null($sistema) ? $this->_sistema : $sistema;
160         return @$this->_permisos[$sistema] ? $this->_permisos[$sistema] : array();
161     }
162     // -X2C
163
164     // +X2C Operation 388
165     /**
166      * @return void
167      * @access public
168      */
169     function chequear() // ~X2C
170     {
171         $args = func_get_args();
172         if (!call_user_func_array(array($this, 'tiene'), $args)) {
173             include 'MECON/includes/no_autorizado.html';
174             exit;
175         }
176     }
177     // -X2C
178
179     // +X2C Operation 391
180     /**
181      * Obtiene las observaciones de un permiso para un sistema.
182      *
183      * @param  int $perm Obtiene las observaciones de un permiso para un sistema.
184      * @param  int $sistema Sistema al cual pertenecen los permisos.
185      *
186      * @return array
187      * @access public
188      */
189     function getObservaciones($perm, $sistema = null) // ~X2C
190     {
191         $sistema = is_null($sistema) ? $this->_sistema : $sistema;
192         if (!@is_array($this->_observaciones[$sistema][$perm])) {
193             $this->_observaciones[$sistema][$perm] = array();
194             $query = '
195                 SELECT ps.observaciones AS observaciones
196                 FROM samurai.perm_sist AS ps
197                 WHERE ps.id_permiso = '.$this->_db->quote($perm).'
198                   AND ps.id_sistema = '.$this->_db->quote($sistema);
199             foreach ($this->_db->getAll($query, DB_FETCHMODE_ASSOC) as $row) {
200                 $this->_observaciones[$sistema][$perm][] = $row['observaciones'];
201             }
202         }
203         return $this->_observaciones[$sistema][$perm];
204     }
205     // -X2C
206
207     /**
208      * Obtiene los datos de los usuarios que tienen el permiso indicado.
209      *
210      * @param  db  $db Base de datos.
211      * @param  int $sistema Identificador del sistema al que pertenece el permiso.
212      * @param  int $perm Identificador del permiso.
213      * @param  string $obs Observación de la asignación del permiso.
214      *
215      * @return array
216      * @access public
217      * @static
218      */
219     function getUsuariosPermiso (&$db, $sistema, $perm, $obs = null)
220     {
221         $sql = "SELECT  PSU.login, 
222                         U.nombre, 
223                         LEFT (P.desc_perfil, LOCATE(' ', P.desc_perfil)) desc_perfil
224                 FROM    samurai.perfil_sist_usuario AS PSU, 
225                         usuario.Usuario AS U, 
226                         samurai.perm_perfil_sist AS PPS, 
227                         samurai.perfil AS P 
228                 WHERE   U.login = PSU.login AND 
229                         PSU.id_perfil = PPS.id_perfil AND 
230                         PPS.id_perfil = P.id_perfil AND 
231                         PSU.id_sistema = $sistema AND 
232                         PPS.id_permiso = $perm ";
233         
234         $sql.= (is_null($obs))?
235                         " ORDER BY U.nombre": 
236                         " AND PPS.observaciones = '". $obs. "' ORDER BY U.nombre";
237
238         return  $db->getAll($sql);
239
240     }
241
242 } // -X2C Class :SAMURAI_Perm
243
244 ?>