2 vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4 ft=perl:
3 +--------------------------------------------------------------------+
4 | Ministerio de EconomÃa |
6 +--------------------------------------------------------------------+
7 | This file is part of SAMURAI. |
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. |
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. |
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 +--------------------------------------------------------------------+
28 Libreria para el manejo de permisos para perl.
31 $CLEANUP{'SAMURAI_Perm'} = 0;
35 # Parser para el ini de configuracion
38 $SAMURAI_Perm->{parse_ini} = sub
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');
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.
56 $SAMURAI_Perm->{new} = sub
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});
71 #Desconexion con la base
73 $udat{SAMURAI_Perm_vars}{permisos} = \%permisos; #Se asignan a $udat para que esten disponibles siempre
78 # @param int $sistema Sistema.
81 $SAMURAI_Perm->{setSistema} = sub
83 $udat{SAMURAI_Perm_vars}{id_sistema} = @_[0];
86 # Verifica si tiene un permiso.
87 # Se puede pasar parametros variables con un identificador de permiso,
89 # $ret->{SAMURAI_PERM}->{tiene}(1, 4, 12);
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
96 $SAMURAI_Perm->{tiene} = sub
99 #Devuelvo true si tiene al menos un permiso
100 if (scalar ($udat{SAMURAI_Perm_vars}{permisos}{$udat{SAMURAI_Perm_vars}{id_sistema}})) {
109 foreach $perm (@{$udat{SAMURAI_Perm_vars}{permisos}{$udat{SAMURAI_Perm_vars}{id_sistema}}}) {
119 # Obtiene una lista de permisos. Si se especifica un sistema, obtiene la lista de permisos para ese sistema.
121 # @param int $sistema Sistema del cual obtener la lista de permisos.
124 $SAMURAI_Perm->{getPermisos} = sub
127 return $udat{SAMURAI_Perm_vars}{permisos}{$udat{SAMURAI_Perm_vars}{id_sistema}};
130 return $udat{SAMURAI_Perm_vars}{permisos}{@_[0]};
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.
138 $SAMURAI_Perm->{chequear} = sub
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>) {
149 # Obtiene las observaciones de un permiso para un sistema.
151 # @param int $perm Obtiene las observaciones de un permiso para un sistema.
152 # @param int $sistema Sistema al cual pertenecen los permisos.
155 $SAMURAI_Perm->{getObservaciones} = sub
162 $sistema = $udat{SAMURAI_Perm_vars}{id_sistema};
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});
176 #Desconexion con la base
178 $udat{SAMURAI_Perm_vars}{observaciones} = \%obser;
179 return $udat{SAMURAI_Perm_vars}{observaciones};
183 # MANAZAR: Funcion para dar un perfil a un usuario en un sistema
186 $SAMURAI_Perm->{asignarPerfil} = sub
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
201 # MANAZAR: Funcion para quitar perfil a un usuario en un sistema
204 $SAMURAI_Perm->{quitarPerfil} = sub
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
225 $ret->{SAMURAI_Perm} = $SAMURAI_Perm;