]> git.llucax.com Git - mecon/samurai.git/blob - lib/SAMURAI/Perm.php
ad31b05b02ce7caf54ca431b6667e2553ac0b4a9
[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  *
34  * @package SAMURAI
35  * @access public
36  */
37 class SAMURAI_Perm {
38     /**
39      * 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.
40      *
41      * @var    array $permisos
42      * @access protected
43      */
44     var $_permisos = array();
45
46     /**
47      * Sistema usado actualmente.
48      *
49      * @var    int $sistema
50      * @access protected
51      */
52     var $_sistema;
53
54     /**
55      * Base de datos a usar en las conexiones.
56      *
57      * @var    DB $db
58      * @access protected
59      */
60     var $_db;
61
62     /**
63      * Observaciones de los permisos.
64      *
65      * @var    array $observaciones
66      * @access protected
67      */
68     var $_observaciones = array();
69
70     /**
71      * Sets Sistema.
72      *
73      * @param  int $sistema Sistema.
74      *
75      * @return void
76      * @access public
77      */
78     function setSistema($sistema)
79     {
80         $this->_sistema = $sistema;
81     }
82
83     // ~X2C
84
85     // +X2C Operation 380
86     /**
87      * Constructor.
88      *
89      * @param  int $login Login del usuario para el cual obtener los permisos.
90      * @param  int $sistema Sistema con el cual se va a trabajar.
91      * @param  DB &$db Base de datos a usar.
92      *
93      * @return void
94      * @access public
95      */
96     function SAMURAI_Perm($login, $sistema, &$db) // ~X2C
97     {
98         $this->_sistema = $sistema;
99         $query = '
100             SELECT DISTINCT psu.id_sistema AS sistema, pps.id_permiso AS permiso
101             FROM samurai.perfil_sist_usuario AS psu, samurai.perm_perfil_sist AS pps
102             WHERE psu.login = '.$db->quote($login).' AND psu.id_perfil = pps.id_perfil
103             AND psu.id_sistema = pps.id_sistema';
104         foreach ($db->getAll($query, DB_FETCHMODE_ASSOC) as $row) {
105             $this->_permisos[$row['sistema']][] = $row['permiso'];
106         }
107         $this->_db =& $db;
108     }
109     // -X2C
110
111     // +X2C Operation 381
112     /**
113      * Verifica si tiene un permiso.
114 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.
115 Si no se pasa ningun parametro ($perm->tiene()), devuelve true si tiene un permiso (al menos uno) en el sistema actual.
116 @see chequear()
117      *
118      * @return bool
119      * @access public
120      */
121     function tiene() // ~X2C
122     {
123         $args = func_get_args();
124         if (!$args) {
125             return (boolean) @$this->_permisos[$this->_sistema];
126         } else {
127             foreach ($args as $arg) {
128                 if (is_array($arg)) {
129                      if (@array_intersect($arg, $this->_permisos[$this->_sistema])) {
130                         return true;
131                      }
132                 } else {
133                      if (@in_array($arg, $this->_permisos[$this->_sistema])) {
134                         return true;
135                      }
136                 }
137             }
138             return false;
139         }
140     }
141     // -X2C
142
143
144     // +X2C Operation 385
145     /**
146      * Obtiene una lista de permisos. Si se especifica un sistema, obtiene la lista de permisos para ese sistema.
147      *
148      * @param  int $sistema Sistema del cual obtener la lista de permisos.
149      *
150      * @return array
151      * @access public
152      */
153     function getPermisos($sistema = null) // ~X2C
154     {
155         $sistema = is_null($sistema) ? $this->_sistema : $sistema;
156         return @$this->_permisos[$sistema] ? $this->_permisos[$sistema] : array();
157     }
158     // -X2C
159
160     // +X2C Operation 388
161     /**
162      * @return void
163      * @access public
164      */
165     function chequear() // ~X2C
166     {
167         $args = func_get_args();
168         if (!call_user_func_array(array($this, 'tiene'), $args)) {
169             include 'MECON/includes/no_autorizado.html';
170             exit;
171         }
172     }
173     // -X2C
174
175     // +X2C Operation 391
176     /**
177      * Obtiene las observaciones de un permiso para un sistema.
178      *
179      * @param  int $perm Obtiene las observaciones de un permiso para un sistema.
180      * @param  int $sistema Sistema al cual pertenecen los permisos.
181      *
182      * @return array
183      * @access public
184      */
185     function getObservaciones($perm, $sistema = null) // ~X2C
186     {
187         $sistema = is_null($sistema) ? $this->_sistema : $sistema;
188         if (!@is_array($this->_observaciones[$sistema][$perm])) {
189             $this->_observaciones[$sistema][$perm] = array();
190             $query = '
191                 SELECT ps.observaciones AS observaciones
192                 FROM samurai.perm_sist AS ps
193                 WHERE ps.id_permiso = '.$this->_db->quote($perm).'
194                   AND ps.id_sistema = '.$this->_db->quote($sistema);
195             foreach ($this->_db->getAll($query, DB_FETCHMODE_ASSOC) as $row) {
196                 $this->_observaciones[$sistema][$perm][] = $row['observaciones'];
197             }
198         }
199         return $this->_observaciones[$sistema][$perm];
200     }
201     // -X2C
202
203 } // -X2C Class :SAMURAI_Perm
204
205 ?>