]> git.llucax.com Git - mecon/samurai.git/blob - lib/SAMURAI/Perm.php
Se agrega SAMURAI_Perm para manejar los permisos desde las aplicaciones.
[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      * Sets Sistema.
56      *
57      * @param  int $sistema Sistema.
58      *
59      * @return void
60      * @access public
61      */
62     function setSistema($sistema)
63     {
64         $this->_sistema = $sistema;
65     }
66
67     // ~X2C
68
69     // +X2C Operation 380
70     /**
71      * Constructor.
72      *
73      * @param  int $login Login del usuario para el cual obtener los permisos.
74      * @param  int $sistema Sistema con el cual se va a trabajar.
75      * @param  DB &$db Base de datos a usar.
76      *
77      * @return void
78      * @access public
79      */
80     function SAMURAI_Perm($login, $sistema, &$db) // ~X2C
81     {
82         $this->_sistema = $sistema;
83         $query = '
84             SELECT DISTINCT psu.id_sistema AS sistema, pps.id_permiso AS permiso
85             FROM samurai.perfil_sist_usuario AS psu, samurai.perm_perfil_sist AS pps
86             WHERE psu.login = '.$db->quote($login).' AND psu.id_perfil = pps.id_perfil;';
87         foreach ($db->getAll($query, DB_FETCHMODE_ASSOC) as $row) {
88             $this->_permisos[$row['sistema']][] = $row['permiso'];
89         }
90     }
91     // -X2C
92
93     // +X2C Operation 381
94     /**
95      * Verifica si tiene un permiso. Se puede pasar par?etros variables, por ejemplo: $perm->tiene(1, 4, 9, 12); Si tiene algn permiso devuelve true. Si no se pasa ningn p?ametro ($perm->tiene()), devuelve true si tiene un permiso (al menos uno) en el sistema actual.
96      *
97      * @return bool
98      * @access public
99      */
100     function tiene() // ~X2C
101     {
102         $args = func_get_args();
103         if (!$args) {
104             return (boolean) @$this->_permisos[$this->_sistema];
105         } else {
106             foreach ($args as $arg) {
107                 if (is_array($arg)) {
108                      if (array_intersect($arg, @$this->_permisos[$this->_sistema])) {
109                         return true;
110                      }
111                 } else {
112                      if (in_array($arg, @$this->_permisos[$this->_sistema])) {
113                         return true;
114                      }
115                 }
116             }
117             return false;
118         }
119     }
120     // -X2C
121
122
123     // +X2C Operation 385
124     /**
125      * Obtiene una lista de permisos. Si se especifica un sistema, obtiene la lista de permisos para ese sistema.
126      *
127      * @param  int $sistema Sistema del cual obtener la lista de permisos.
128      *
129      * @return array
130      * @access public
131      */
132     function getPermisos($sistema = '') // ~X2C
133     {
134         $sistema = $sistema ? $sistema : $this->_sistema;
135         return @$this->_permisos[$sistema] ? $this->_permisos[$sistema] : array();
136     }
137     // -X2C
138
139 } // -X2C Class :SAMURAI_Perm
140
141 ?>