]> git.llucax.com Git - mecon/samurai.git/blob - lib_perl/Perm.epl
BugFix.
[mecon/samurai.git] / lib_perl / Perm.epl
1 [# 
2  vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4 ft=perl:
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: vie oct 17 15:21:05 ART 2003                               |
24  | Autor:  Martin Marrese <mmarre@mecon.gov.ar>                       |
25  +--------------------------------------------------------------------+
26  $Id$
27
28  Libreria para el manejo de permisos para perl.
29 #]
30 [!
31 $CLEANUP{'SAMURAI_Perm'} = 0;
32
33 use Data::Dumper;
34
35 # Parser para el ini de configuracion
36 #
37 # @return hash
38 $SAMURAI_Perm->{parse_ini} = sub
39 {
40     use Config::IniFiles;
41     my $cfg = new Config::IniFiles( -file =>
42     "/var/www/sistemas/samurai/lib_perl/consultasDB.ini" );
43     $dsn->{dsn} = $cfg->val('conf', 'dsn');
44     $dsn->{user} = $cfg->val('conf', 'user');
45     $dsn->{password} = $cfg->val('conf', 'password');
46     return $dsn;    
47 };
48
49
50 # Simil Constructor.
51 #
52 # @param  string $login Login del usuario para el cual obtener los permisos.
53 # @param  int    $sistema Sistema con el cual se va a trabajar.
54 #
55 # @return void
56 $SAMURAI_Perm->{new} = sub
57 {
58     my $sql = "SELECT DISTINCT psu.id_sistema AS sistema, pps.id_permiso AS permiso FROM samurai.perfil_sist_usuario AS psu, samurai.perm_perfil_sist AS pps WHERE psu.login = ? AND psu.id_perfil = pps.id_perfil AND psu.id_sistema = pps.id_sistema ORDER BY psu.id_sistema";
59     $udat{SAMURAI_Perm_vars}{login} = @_[0];
60     $udat{SAMURAI_Perm_vars}{id_sistema} = @_[1];
61     ##Conexion con la base
62     $dns = $ret->{SAMURAI_Perm}->{parse_ini} ();
63     my $dbh = DBI->connect($dsn->{dsn}, $dsn->{user}, $dsn->{password});
64     ##Obtengo los permisos de la base        
65     $re = $dbh->prepare($sql);
66     $re->execute($udat{SAMURAI_Perm_vars}{login});        
67     while ($r = $re->fetchrow_hashref()) {
68         push (@{$permisos{$r->{sistema}}}, $r->{permiso});
69     }        
70     $re->finish();             
71     #Desconexion con la base
72     $dbh->disconnect;          
73     $udat{SAMURAI_Perm_vars}{permisos} = \%permisos; #Se asignan a $udat para que esten disponibles siempre        
74 };       
75
76 # Set Sistema.
77 #
78 # @param  int $sistema Sistema.
79 #
80 # @return void
81 $SAMURAI_Perm->{setSistema} = sub
82 {
83     $udat{SAMURAI_Perm_vars}{id_sistema} = @_[0];
84 };
85
86 # Verifica si tiene un permiso.
87 # Se puede pasar parametros variables con un identificador de permiso, 
88 # por ejemplo: 
89 # $ret->{SAMURAI_PERM}->{tiene}(1, 4, 12); 
90 #
91 # Si tiene algun permiso devuelve true. Si no se pasa ningun parametro 
92 # ($perm->tiene()), devuelve true si tiene un permiso (al menos uno) en el 
93 # sistema actual.
94 #
95 # @return bool
96 $SAMURAI_Perm->{tiene} = sub
97 {
98     if (!scalar(@_)) {         
99         #Devuelvo true si tiene al menos un permiso
100         if (scalar ($udat{SAMURAI_Perm_vars}{permisos}{$udat{SAMURAI_Perm_vars}{id_sistema}})) {
101             return 1;
102         }
103         else {
104             return 0;
105         }
106     }
107     else {
108         foreach $arg (@_) {
109             foreach $perm (@{$udat{SAMURAI_Perm_vars}{permisos}{$udat{SAMURAI_Perm_vars}{id_sistema}}}) {
110                 if ($arg == $perm) {
111                     return 1;
112                 }
113             }
114         }
115         return 0;
116     }
117 };
118
119 # Obtiene una lista de permisos. Si se especifica un sistema, obtiene la lista de permisos para ese sistema.                                
120 #
121 # @param  int $sistema Sistema del cual obtener la lista de permisos.                                                                       
122 #
123 # @return array
124 $SAMURAI_Perm->{getPermisos} = sub
125 {
126     if (!scalar(@_)) {
127         return $udat{SAMURAI_Perm_vars}{permisos}{$udat{SAMURAI_Perm_vars}{id_sistema}};
128     }
129     else {
130         return $udat{SAMURAI_Perm_vars}{permisos}{@_[0]};
131     }
132 };
133
134 # Chequea si un usuario puede acceder o no a una pagina. En caso de no tener
135 # permisos automaticamente lo redirige a una pagina de error.
136 #
137 # @return void
138 $SAMURAI_Perm->{chequear} = sub
139 {
140     if (!$ret->{SAMURAI_Perm}->{tiene} (@_)) {
141         open (ARCHORIG , "/var/www/meconlib/lib/MECON/includes/no_autorizado.html") or  die "POROTO";
142         while (my $linea = <ARCHORIG>) {
143             print $linea
144         }
145         exit;
146     }
147 };
148
149 # Obtiene las observaciones de un permiso para un sistema.                                                                                  
150 #
151 # @param  int $perm Obtiene las observaciones de un permiso para un sistema.
152 # @param  int $sistema Sistema al cual pertenecen los permisos.                                                                             
153 #
154 # @return array
155 $SAMURAI_Perm->{getObservaciones} = sub
156 {
157     $perm = @_[0];
158     if (scalar(@_[1])) {
159         $sistema = @_[1];    
160     }
161     else {
162         $sistema = $udat{SAMURAI_Perm_vars}{id_sistema};
163     }
164     if (!$udat{SAMURAI_Perm_vars}{observaciones}{$sistema}{$perm}) {
165         $udat{SAMURAI_Perm_vars}{observaciones} = '';
166         $sql = 'SELECT ps.observaciones AS observaciones FROM samurai.perm_sist AS ps WHERE ps.id_permiso = ? AND ps.id_sistema = ?';
167         ##Conexion con la base
168         $dns = $ret->{SAMURAI_Perm}->{parse_ini} ();
169         my $dbh = DBI->connect($dsn->{dsn}, $dsn->{user}, $dsn->{password});
170         $re = $dbh->prepare($sql);
171         $re->execute($perm, $sistema);        
172         while ($r = $re->fetchrow_hashref()) {
173             push (@{$obser{$sistema}{$perm}}, $r->{observaciones});
174         }        
175         $re->finish();             
176         #Desconexion con la base
177         $dbh->disconnect;          
178         $udat{SAMURAI_Perm_vars}{observaciones} = \%obser;
179         return $udat{SAMURAI_Perm_vars}{observaciones};
180     }
181 };
182
183 # MANAZAR: Funcion para dar un perfil a un usuario en un sistema
184 #
185 # @return void
186 $SAMURAI_Perm->{asignarPerfil} = sub
187 {
188     $id_perfil = @_[0];
189         my $login=$udat{SAMURAI_Perm_vars}{login};
190         my $id_sistema=$udat{SAMURAI_Perm_vars}{id_sistema};
191         my $resp=$udat{'user'};
192         my $sql = "REPLACE INTO perfil_sist_usuario (login,id_perfil,id_sistema,responsable) VALUES ('$login',$id_perfil,$id_sistema,'$resp')";
193     ##Conexion con la base
194     $dns = $ret->{SAMURAI_Perm}->{parse_ini} ();
195     my $dbh = DBI->connect($dsn->{dsn}, $dsn->{user}, $dsn->{password});
196         my $result=$dbh->do($sql);
197     #Desconexion con la base
198         $dbh->disconnect;  
199 };
200
201 # MANAZAR: Funcion para quitar perfil a un usuario en un sistema
202 #
203 # @return void
204 $SAMURAI_Perm->{quitarPerfil} = sub
205 {
206     $id_perfil = @_[0];
207         my $login=$udat{SAMURAI_Perm_vars}{login};
208         my $id_sistema=$udat{SAMURAI_Perm_vars}{id_sistema};
209         my $resp=$udat{'user'};
210         my $sql = "DELETE FROM perfil_sist_usuario where (login='$login') AND (id_perfil=$id_perfil) AND (id_sistema=$id_sistema)";
211     ##Conexion con la base
212     $dns = $ret->{SAMURAI_Perm}->{parse_ini} ();
213     my $dbh = DBI->connect($dsn->{dsn}, $dsn->{user}, $dsn->{password});
214         ##Conexion con la base
215         my $result=$dbh->do($sql);
216     #Desconexion con la base
217         $dbh->disconnect;  
218 };
219
220
221
222 !]
223 [-
224     $ret = shift;
225     $ret->{SAMURAI_Perm} = $SAMURAI_Perm;
226 -]  
227