From 0cf56477ad378a18f1d9daad478a4e14427b6b3b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mart=C3=ADn=20Marrese?= Date: Fri, 17 Oct 2003 22:51:36 +0000 Subject: [PATCH] Libreria SAMURAI_Perm en Perl casi lista. Falta getObservaciones y verificar que getPermisos funcione correctamente --- lib_perl/Perm.epl | 170 ++++++++++++++++++++++++++++++ sistema/www/sistemas/sistemas.php | 4 +- test/prueba.epl | 78 ++++++++------ 3 files changed, 220 insertions(+), 32 deletions(-) create mode 100644 lib_perl/Perm.epl diff --git a/lib_perl/Perm.epl b/lib_perl/Perm.epl new file mode 100644 index 0000000..b36bab6 --- /dev/null +++ b/lib_perl/Perm.epl @@ -0,0 +1,170 @@ +[# + 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{'SAMURAI_Perm'} = 0; + +# 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.isd_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=bal747f',"intranet","intranet"); + ##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 { + return 0; + } + } + else { + foreach $arg (@_) { + foreach $perm (@{$udat{SAMURAI_Perm_vars}{permisos}{$udat{SAMURAI_Perm_vars}{id_sistema}}}) { + if ($arg == $perm) { + return 1; + } + } + } + return 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 +# TODO Probar que esto este funcionando bien. +$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 + } + 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 = ?'; + my $dbh = DBI->connect('dbi:mysql:dbname=samurai;host=bal747f',"intranet","intranet"); + $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}{$sistema}{$perm} = \%obser; + + return $obser; + } +}; +!] +[- + $ret = shift; + $ret->{SAMURAI_Perm} = $SAMURAI_Perm; +-] + diff --git a/sistema/www/sistemas/sistemas.php b/sistema/www/sistemas/sistemas.php index 5bcd329..e6f1bb7 100644 --- a/sistema/www/sistemas/sistemas.php +++ b/sistema/www/sistemas/sistemas.php @@ -41,8 +41,8 @@ $SAMURAI_PERM->chequear(SAMURAI_PERM_DEVELOPER); $TABLA2 = new MECON_HTML_Tabla ('cellspacing=0'); $row = array ('Seleccionar otro sistema para trabajar', $aHref.'Ingresar Nuevo Sistema'); $TABLA2->addRow($row); - $TABLA2->setColAlign(0,'left'); - $TABLA2->setColAlign(1,'right'); + $TABLA2->updateColAttributes(0,'align="left"'); + $TABLA2->updateColAttributes(1,'align="right"'); $TABLA = new MECON_HTML_Tabla ('cellpadding=2'); $row = array ('Id','Nombre','Modif.','Elim.','Perm.'); diff --git a/test/prueba.epl b/test/prueba.epl index 506174f..1224035 100644 --- a/test/prueba.epl +++ b/test/prueba.epl @@ -1,47 +1,65 @@ +[# +vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4 ft=perl: +#] [- $ret = shift; + $udat{user} = 'mmarre@mecon'; + use Data::Dumper; - Execute('./../perl/Samurai/Perm.epl'); + Execute('./../lib_perl/Perm.epl'); + +#define('SAMURAI_PERM', 44); +#define('SAMURAI_PERM_DEVELOPER', 66); +#define('SAMURAI_PERM_PERFIL_ALTA', 58); +#define('SAMURAI_PERM_PERFIL_BAJA', 59); +#define('SAMURAI_PERM_PERFIL_MODIF', 60); +#define('SAMURAI_PERM_PERFIL_TIPO', 65); +#define('SAMURAI_PERM_USUARIO_ALTA', 61); +#define('SAMURAI_PERM_USUARIO_BAJA', 62); +#define('SAMURAI_PERM_USUARIO_MODIF', 63 + + print 'Cargo los datos -> Imitando el constructor.
'; + $ret->{SAMURAI_Perm}->{new} ('mmarre@mecon', 666); - $udat{user}='mmarre@mecon'; + print 'Seteo otro sistema para trabajar
'; + $ret->{SAMURAI_Perm}->{setSistema} (44); - $ok = $ret->{SA_Perm}->{SA_Perm} (1); - - print "Set de Prueba:\n"; - print " Permisos : 1,2,3,9,3\n"; - print " Permiso unico: 4\n"; - print " Usuario : $udat{user}\n"; - - print "tiene\n"; - if ($ret->{SA_Perm}->{tiene} (1,2,3,9,3)) { - print "TIENE TODOS LOS PERMISOS\n"; + print 'Veo si tiene algun permiso en el sistema seleccionado
'; + if ($ret->{SAMURAI_Perm}->{tiene} ()) { + print 'Tiene al menos un permiso en el sistema '. $udat{SAMURAI_Perm_vars}{id_sistema}.'
'; } else { - print "NO TIENE TODOS LOS PERMISOS\n"; + print 'No tiene permisos en el sistema '. $udat{SAMURAI_Perm_vars}{id_sistema}.'
'; } - print "tieneO\n"; - if ($ret->{SA_Perm}->{tieneO} (1,2,3,9,3)) { - print "TIENE ALGUNOS DE LOS PERMISOS\n"; + print 'Veo si tiene algun permiso de los pasados por parametro.
'; + if ($ret->{SAMURAI_Perm}->{tiene} (61,602)) { + print 'Tiene al menos uno de los permisos en el sistema '. $udat{SAMURAI_Perm_vars}{id_sistema}.'
'; } else { - print "NO TIENE NINGUNO DE LOS PERMISOS\n"; + print 'No tiene ninguno de los permisos en el sistema '. $udat{SAMURAI_Perm_vars}{id_sistema}.'
'; } + + print 'Obtengo los permisos del sistema en el cual estoy trabajando.
'; + $tmp = $ret->{SAMURAI_Perm}->{getPermisos} (); + print Dumper($tmp); - print "tieneODevol\n"; - @tieneODevol = $ret->{SA_Perm}->{tieneODevol} (1,2,3,9,3); - print "Tiene los siguientes Permisos: \n"; - foreach $m (@tieneODevol) { - print "$m\n"; - } + print '
Obtengo los permisos del sistema 61
'; + $tmp = $ret->{SAMURAI_Perm}->{getPermisos} (61); + print Dumper($tmp); + print '
'; + + print 'Pruebo la funcion chequear
'; +# $ret->{SAMURAI_Perm}->{chequear} (61); + print 'Si aparece esto es porque tenia al menos uno de los permisos que se pasaron como parametro
'; - print "tieneUn\n"; - if ($ret->{SA_Perm}->{tieneUn} (4)){ - print "Tiene el permiso\n"; - } - else { - print "No tiene el permiso\n"; - } + print 'Hago un get observaciones
'; +# $tmp = $ret->{SAMURAI_Perm}->{getObservaciones} (66,61); +# print Dumper(\%tmp); + +# print Dumper($udat{SAMURAI_Perm_vars}{observaciones}); + + print '

FINALE PRESTO CON TUTTI
'; -] -- 2.43.0