X-Git-Url: https://git.llucax.com/mecon/samurai.git/blobdiff_plain/f209b333eae3c22b3ce1da39325f96ad1ba473ac..85fa6f9992f0919055aa13158f6b4828a6e73e90:/lib_perl/Perm.epl diff --git a/lib_perl/Perm.epl b/lib_perl/Perm.epl index 43e19ed..346cc67 100644 --- a/lib_perl/Perm.epl +++ b/lib_perl/Perm.epl @@ -1,148 +1,212 @@ -[# - vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: - +--------------------------------------------------------------------+ - | SAMURAI - Samurai_Lib | - +--------------------------------------------------------------------+ - | Sistema de Administracion y Matenimiento de Usuarios Relativo A | - | Intranet | - | Ministerio de Economía | - +--------------------------------------------------------------------+ - | Creado: $Date$ | - | Autor: Martin Marrese | - +--------------------------------------------------------------------+ - - $Id$ - - $URL$ - $Rev$ - $Date$ - $Author$ +[# + vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4 ft=perl: + +--------------------------------------------------------------------+ + | Ministerio de Economía | + | SAMURAI | + +--------------------------------------------------------------------+ + | This file is part of SAMURAI. | + | | + | SAMURAI is free software; you can redistribute it and/or modify | + | it under the terms of the GNU General Public License as published | + | by the Free Software Foundation; either version 2 of the License, | + | or (at your option) any later version. | + | | + | SAMURAI is distributed in the hope that it will be useful, but | + | WITHOUT ANY WARRANTY; without even the implied warranty of | + | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | + | General Public License for more details. | + | | + | You should have received a copy of the GNU General Public License | + | along with SAMURAI; if not, write to the Free Software Foundation, | + | Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | + +--------------------------------------------------------------------+ + | Creado: vie oct 17 15:21:05 ART 2003 | + | Autor: Martin Marrese | + +--------------------------------------------------------------------+ + $Id$ + + Libreria para el manejo de permisos para perl. #] [! - $CLEANUP{'SA_Perm'} = 0; - ###CONSTRUCTOR - ## in: sistema -> identificador numerico del sistema - ## login se obtiene automaticamente en $udat{user} - ## - ## out: bool ok - $SA_Perm->{SA_Perm} = sub - { - - $sql = "SELECT DISTINCT pps.id_permiso AS id_permiso FROM perfil_sist_usuario AS psu , perm_perfil_sist AS pps WHERE psu.id_sistema = ? AND login = ? AND psu.id_perfil = pps.id_perfil"; - - $udat{SA_Perm_Id_Sistema} = @_[0]; - $result = true; #asumo que no va a fallar - - ##Conexion con la base - $dbh = DBI->connect('dbi:mysql:dbname=samurai;host=localhost',"intranet","intranet"); - - ##Obtengo los permisos de la base - $re = $dbh->prepare($sql); - $re->execute($udat{SA_Perm_Id_Sistema}, $udat{user}); - while ($r = $re->fetchrow_hashref()) { - push (@tmp, $r->{id_permiso}); - } - $re->finish(); - - #Desconexion con la base - $dbh->disconnect; - $udat{SA_Permisos} = \@tmp;#Se asignan a $udat para que esten disponibles siempre - - return $result; - }; +$CLEANUP{'SAMURAI_Perm'} = 0; - ###TIENE - ## Verifica que el usuario tenga todos los permisos que se pasan como - ## parametro. - ## in: permisos a buscar - ## - ## out: int 1 -> ok, 0 -> nok - $SA_Perm->{tiene} = sub - { - $result = 1; #asumo que no va a fallar - if (!scalar(@_)) { - $result = 0; #Siempre debe haber como minimo un permiso a comparar - } - else { - @rr = $ret->{SA_Perm}->{tieneODevol} (@_); - if (scalar(@_) != scalar(@rr)) { - $result = 0; - } - } - return $result; - }; +use Data::Dumper; - ###TIENEO - ## Verifica que el usuario tenga alguno de los permisos que se pasan como - ## parametro. - ## in: permisos a buscar - ## - ## out: int 1 -> ok, 0 -> nok - $SA_Perm->{tieneO} = sub - { - $result = 1; #asumo que no va a fallar - if (!scalar(@_)) { - $result = 0; #Siempre debe haber como minimo un permiso a comparar + +# Simil Constructor. +# +# @param string $login Login del usuario para el cual obtener los permisos. +# @param int $sistema Sistema con el cual se va a trabajar. +# +# @return void +$SAMURAI_Perm->{new} = sub +{ + 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"; + $udat{SAMURAI_Perm_vars}{login} = @_[0]; + $udat{SAMURAI_Perm_vars}{id_sistema} = @_[1]; + ##Conexion con la base + #TODO Cambiar los parametros de conexion segun corresponda. + + my $dbh = DBI->connect('dbi:mysql:dbname=samurai;host=localhost',"samurai","25fdd50c0e4d68"); + ##Obtengo los permisos de la base + $re = $dbh->prepare($sql); + $re->execute($udat{SAMURAI_Perm_vars}{login}); + while ($r = $re->fetchrow_hashref()) { + push (@{$permisos{$r->{sistema}}}, $r->{permiso}); + } + $re->finish(); + #Desconexion con la base + $dbh->disconnect; + $udat{SAMURAI_Perm_vars}{permisos} = \%permisos; #Se asignan a $udat para que esten disponibles siempre +}; + +# Set Sistema. +# +# @param int $sistema Sistema. +# +# @return void +$SAMURAI_Perm->{setSistema} = sub +{ + $udat{SAMURAI_Perm_vars}{id_sistema} = @_[0]; +}; + +# Verifica si tiene un permiso. +# Se puede pasar parametros variables con un identificador de permiso, +# por ejemplo: +# $ret->{SAMURAI_PERM}->{tiene}(1, 4, 12); +# +# Si tiene algun permiso devuelve true. Si no se pasa ningun parametro +# ($perm->tiene()), devuelve true si tiene un permiso (al menos uno) en el +# sistema actual. +# +# @return bool +$SAMURAI_Perm->{tiene} = sub +{ + if (!scalar(@_)) { + #Devuelvo true si tiene al menos un permiso + if (scalar ($udat{SAMURAI_Perm_vars}{permisos}{$udat{SAMURAI_Perm_vars}{id_sistema}})) { + return 1; } else { - @rr = $ret->{SA_Perm}->{tieneODevol} (@_); - if (!scalar(@rr)) { - $result = 0; + return 0; + } + } + else { + foreach $arg (@_) { + foreach $perm (@{$udat{SAMURAI_Perm_vars}{permisos}{$udat{SAMURAI_Perm_vars}{id_sistema}}}) { + if ($arg == $perm) { + return 1; + } } } - return $result; - }; + return 0; + } +}; - ###TIENEUN - ## Verifica que el usuario tenga un permiso que se pasa como - ## parametro. - ## in: permiso a buscar - ## - ## out: int 1 -> ok, 0 -> nok - $SA_Perm->{tieneUn} = sub - { - $result = 1; #asumo que no va a fallar - if (!scalar(@_)) { - $result = 0; #Siempre debe haber un permiso a comparar - } - else { - @rr = $ret->{SA_Perm}->{tieneODevol} (@_); - if (!scalar(@rr)) { - $result = 0; - } +# Obtiene una lista de permisos. Si se especifica un sistema, obtiene la lista de permisos para ese sistema. +# +# @param int $sistema Sistema del cual obtener la lista de permisos. +# +# @return array +$SAMURAI_Perm->{getPermisos} = sub +{ + if (!scalar(@_)) { + return $udat{SAMURAI_Perm_vars}{permisos}{$udat{SAMURAI_Perm_vars}{id_sistema}}; + } + else { + return $udat{SAMURAI_Perm_vars}{permisos}{@_[0]}; + } +}; + +# Chequea si un usuario puede acceder o no a una pagina. En caso de no tener +# permisos automaticamente lo redirige a una pagina de error. +# +# @return void +$SAMURAI_Perm->{chequear} = sub +{ + if (!$ret->{SAMURAI_Perm}->{tiene} (@_)) { + open (ARCHORIG , "/var/www/meconlib/lib/MECON/includes/no_autorizado.html") or die "POROTO"; + while (my $linea = ) { + print $linea } - return $result; - }; + exit; + } +}; + +# Obtiene las observaciones de un permiso para un sistema. +# +# @param int $perm Obtiene las observaciones de un permiso para un sistema. +# @param int $sistema Sistema al cual pertenecen los permisos. +# +# @return array +$SAMURAI_Perm->{getObservaciones} = sub +{ + $perm = @_[0]; + if (scalar(@_[1])) { + $sistema = @_[1]; + } + else { + $sistema = $udat{SAMURAI_Perm_vars}{id_sistema}; + } + if (!$udat{SAMURAI_Perm_vars}{observaciones}{$sistema}{$perm}) { + $udat{SAMURAI_Perm_vars}{observaciones} = ''; + $sql = 'SELECT ps.observaciones AS observaciones FROM samurai.perm_sist AS ps WHERE ps.id_permiso = ? AND ps.id_sistema = ?'; + #TODO cambiar los parametros de conexion segun corresponda + my $dbh = DBI->connect('dbi:mysql:dbname=samurai;host=localhost',"samurai","25fdd50c0e4d68"); + $re = $dbh->prepare($sql); + $re->execute($perm, $sistema); + while ($r = $re->fetchrow_hashref()) { + push (@{$obser{$sistema}{$perm}}, $r->{observaciones}); + } + $re->finish(); + #Desconexion con la base + $dbh->disconnect; + $udat{SAMURAI_Perm_vars}{observaciones} = \%obser; + return $udat{SAMURAI_Perm_vars}{observaciones}; + } +}; + +# MANAZAR: Funcion para dar un perfil a un usuario en un sistema +# +# @return void +$SAMURAI_Perm->{asignarPerfil} = sub +{ + $id_perfil = @_[0]; + my $login=$udat{SAMURAI_Perm_vars}{login}; + my $id_sistema=$udat{SAMURAI_Perm_vars}{id_sistema}; + my $resp=$udat{'user'}; + my $sql = "REPLACE INTO perfil_sist_usuario (login,id_perfil,id_sistema,responsable) VALUES ('$login',$id_perfil,$id_sistema,'$resp')"; + ##Conexion con la base + #TODO Cambiar los parametros de conexion segun corresponda. + my $dbh = DBI->connect('dbi:mysql:dbname=samurai;host=localhost',"samurai","25fdd50c0e4d68"); + my $result=$dbh->do($sql); + #Desconexion con la base + $dbh->disconnect; +}; + +# MANAZAR: Funcion para quitar perfil a un usuario en un sistema +# +# @return void +$SAMURAI_Perm->{quitarPerfil} = sub +{ + $id_perfil = @_[0]; + my $login=$udat{SAMURAI_Perm_vars}{login}; + my $id_sistema=$udat{SAMURAI_Perm_vars}{id_sistema}; + my $resp=$udat{'user'}; + my $sql = "DELETE FROM perfil_sist_usuario where (login='$login') AND (id_perfil=$id_perfil) AND (id_sistema=$id_sistema)"; + ##Conexion con la base + #TODO Cambiar los parametros de conexion segun corresponda. + my $dbh = DBI->connect('dbi:mysql:dbname=samurai;host=localhost',"samurai","25fdd50c0e4d68"); + my $result=$dbh->do($sql); + #Desconexion con la base + $dbh->disconnect; +}; - ###TIENEODEVOL - ## Compara el contenido de dos arrays y devuelve un array con - ## aquellos datos que se repiten en ambos. - ## in: array permisos a buscar - ## - ## out: array con coincidencias - $SA_Perm->{tieneODevol} = sub - { - @result = (); - if (!scalar(@_)) { - @result[0] = "ERROR"; #Siempre se debe pasar al menos un permiso - } - else { - foreach $arg (@_) { - foreach $perm (@{$udat{SA_Permisos}}) { - if ($arg == $perm) { - push (@result, $arg); - last; - } - } - } - } - return @result; - }; !] [- $ret = shift; - $ret->{SA_Perm} = $SA_Perm; + $ret->{SAMURAI_Perm} = $SAMURAI_Perm; -] - +