From a39b9c1fd1fbd976ce9db682b06f73e92612400c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mart=C3=ADn=20Marrese?= Date: Thu, 13 Mar 2003 19:14:51 +0000 Subject: [PATCH] - Ambas librerias finalizadas, tanto en php como en perl........la primer version Modificaciones futuras seran aceptadas...... --- samurai_lib/doc/samurai_lib_PHP.rtf | 77 +++++++++++ samurai_lib/perl/Samurai/Perm.epl | 148 +++++++++++++++++++++ samurai_lib/perl/Samurai/Perm/db_Conf.epl | 24 ++++ samurai_lib/perl/Samurai/Perm/sql_Conf.epl | 22 +++ samurai_lib/perl/Samurai/base.epl | 1 + samurai_lib/php/Samurai/Perm.php | 32 ++++- samurai_lib/php/Samurai/Perm/sql_Conf.php | 2 +- samurai_lib/test/base.epl | 1 + samurai_lib/test/prueba.epl | 47 +++++++ samurai_lib/test/prueba.php | 14 +- 10 files changed, 364 insertions(+), 4 deletions(-) create mode 100644 samurai_lib/doc/samurai_lib_PHP.rtf create mode 100644 samurai_lib/perl/Samurai/Perm.epl create mode 100644 samurai_lib/perl/Samurai/Perm/db_Conf.epl create mode 100644 samurai_lib/perl/Samurai/Perm/sql_Conf.epl create mode 100644 samurai_lib/perl/Samurai/base.epl create mode 100644 samurai_lib/test/base.epl create mode 100644 samurai_lib/test/prueba.epl diff --git a/samurai_lib/doc/samurai_lib_PHP.rtf b/samurai_lib/doc/samurai_lib_PHP.rtf new file mode 100644 index 0000000..5be6fcb --- /dev/null +++ b/samurai_lib/doc/samurai_lib_PHP.rtf @@ -0,0 +1,77 @@ +{\rtf0\ansi +{\fonttbl +{\f0\fswiss Helvetica;} +{\f1\fmodern Courier;}} +{\info +{\creatim \yr2003\mo3\dy12\hr14\min49\sec5} +{\revtim \yr2003\mo3\dy12\hr15\min12\sec17} +} +\paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440 +\ftnbj\aenddoc\ftnrstcont\aftnrstcont\ftnnar\aftnnrlc +\sectd +\f1\fs20\b SAMURAI - samurai_lib - PHP\par +para ser usada en sistemas hechos en PHP\par +\par +\ul Funcionamiento\par +Objeto:\b0\ul0 \b SA_Perm\par +\ul Variables de Instancia:\par +\ul0 - login \par +\b0 Contiene el login del usuario que se obtiene de $udat.\par +\b - sistema \par + \b0 Contiene el identificador numerico del sistema.\par +\b - permisos\par + \b0 Array con todos los permisos del usuario en el sistema dado. +\par + Es "invisible" a los demas.\par +\b - DB \par + \b0 Objeto que guarda la conexion con la base de datos. Es +"invisible"\par + a los demas.\par +\b\ul Metodos de Instancia:\par +\ul0 - SA_Perm \par + \b0 Constructor. Recive como parametro el identificador numerico del +\par + sistema y el login del usuario (del tipo @)\par +\b - tiene \par + \b0 Funcion que chequea que el usuario tenga todos los permisos que +se\par + pasaron como parametro. Devuelve true si cumple con la condicion, +\par + false en cualquier otro caso.\par +\b - tieneO \par + \b0 Funcion que chequea que el usuario tenga alguno de los permisos +que\par + se pasaron como parametro. Devuelve true si cumple con la condicion, +\par + false en cualquier otro caso.\par +\b - tieneODevol\par + \b0 Funcion que chequea que el usuario tenga alguno de los permisos +que\par + se pasaron como parametro. Devuelve un array con aquellos permisos +\par + que se pararon por parametro y el usuario tiene.\par +\b - tieneUn\par + \b0 Funcion que chequea que el usuario tenga el permiso que se pasa +por \par + por parametro.\par +\b - _obtenerPermisos\par + \b0 Funcion de uso interno que consulta a la base y obtiene todos +los\par + permisos del usuario en el sistema que se paso como parametro.\par +\b - _conectarDB\par + \b0 Funcion que crea la conexion a la base de datos. Es de uso +interno.\par +\par +\par +-------------------------------------\par +Autores : Martin Marrese\par +-------------------------------------\par +Fecha : 12/03/2003\par +Fecha Ultima Modificacion: 12/03/2003\par +------------------------------------- \par +$Id$\par +$Author$\par +$Date$\par +$Url$\par +$Rev$\par +} diff --git a/samurai_lib/perl/Samurai/Perm.epl b/samurai_lib/perl/Samurai/Perm.epl new file mode 100644 index 0000000..43e19ed --- /dev/null +++ b/samurai_lib/perl/Samurai/Perm.epl @@ -0,0 +1,148 @@ +[# + 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$ +#] +[! + $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; + }; + + ###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; + }; + + ###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 + } + else { + @rr = $ret->{SA_Perm}->{tieneODevol} (@_); + if (!scalar(@rr)) { + $result = 0; + } + } + return $result; + }; + + ###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; + } + } + return $result; + }; + + + + ###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; +-] + diff --git a/samurai_lib/perl/Samurai/Perm/db_Conf.epl b/samurai_lib/perl/Samurai/Perm/db_Conf.epl new file mode 100644 index 0000000..610c2de --- /dev/null +++ b/samurai_lib/perl/Samurai/Perm/db_Conf.epl @@ -0,0 +1,24 @@ +[# + $Id$ + + $URL$ + $Rev$ + $Date$ + $Author$ +#] + +[! + $CLEANUP{'db_conf'} = 0; + $db_conf = { + 'db_type' => 'mysql' , + 'db_user' => 'intranet' , + 'db_pass' => 'intranet' , + 'db_host' => 'localhost', + 'db_name' => 'samurai' + }; +!] +[- + $ret = shift; + $ret->{SA_Perm}->{db_conf} = $db_conf; +-] + diff --git a/samurai_lib/perl/Samurai/Perm/sql_Conf.epl b/samurai_lib/perl/Samurai/Perm/sql_Conf.epl new file mode 100644 index 0000000..01ec471 --- /dev/null +++ b/samurai_lib/perl/Samurai/Perm/sql_Conf.epl @@ -0,0 +1,22 @@ +[# + $Id$ + + $URL$ + $Rev$ + $Date$ + $Author$ +#] + +[! + $CLEANUP{'sql_Conf'} = 0; + $sql_Conf = { + 'obtener_p_p_completo' => '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' + }; +!] +[- + $ret = shift; + $ret->{SA_Perm}->{sql_Conf} = $sql_Conf; +-] + diff --git a/samurai_lib/perl/Samurai/base.epl b/samurai_lib/perl/Samurai/base.epl new file mode 100644 index 0000000..5225c21 --- /dev/null +++ b/samurai_lib/perl/Samurai/base.epl @@ -0,0 +1 @@ +[- Execute('*') -] diff --git a/samurai_lib/php/Samurai/Perm.php b/samurai_lib/php/Samurai/Perm.php index c122317..0976f12 100644 --- a/samurai_lib/php/Samurai/Perm.php +++ b/samurai_lib/php/Samurai/Perm.php @@ -117,7 +117,7 @@ class SA_Perm extends PEAR { return $result; } - /** + /** * Verifica los permisos de un usuario * * Compara los permisos que tiene un usuario en relacion a los @@ -146,7 +146,35 @@ class SA_Perm extends PEAR { return $result; } - /** + /** + * Verifica los permisos de un usuario + * + * Compara los permisos que tiene un usuario en relacion a los + * pasados como parametro. Devuelve un array con aquellos permisos que + * el usuario tiene. Funciona similar a tieneO solo que devuelve un array. + * Es de parametros variables, y siempre necesita al menos UN parametro + * + * @param array $permisos Permisos que se buscan + * + * @return array Permisos que tiene el usuario pasados por parametro, o 'ERROR' en caso contrario + * + * @access public + */ + function tieneODevol () + { + $args = func_get_args(); //Obtengo los permisos que me pasaron como argumento + $result = array(); + + if (!count($args)) { + $result['0'] = 'ERROR'; //Siempre se debe pasar al menos un permiso a buscar + } + else { + $result = array_intersect($args, $this->permisos); + } + return $result; + } + + /** * Verifica los permisos de un usuario * * Compara un permiso pasado por parametro con los que tiene el usuario diff --git a/samurai_lib/php/Samurai/Perm/sql_Conf.php b/samurai_lib/php/Samurai/Perm/sql_Conf.php index 9fd63bb..dac5675 100644 --- a/samurai_lib/php/Samurai/Perm/sql_Conf.php +++ b/samurai_lib/php/Samurai/Perm/sql_Conf.php @@ -11,6 +11,6 @@ return array( 'obtener_p_p_completo' => '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' + WHERE psu.id_sistema = ? AND login = ? AND psu.id_perfil = pps.id_perfil' ); ?> diff --git a/samurai_lib/test/base.epl b/samurai_lib/test/base.epl new file mode 100644 index 0000000..5225c21 --- /dev/null +++ b/samurai_lib/test/base.epl @@ -0,0 +1 @@ +[- Execute('*') -] diff --git a/samurai_lib/test/prueba.epl b/samurai_lib/test/prueba.epl new file mode 100644 index 0000000..506174f --- /dev/null +++ b/samurai_lib/test/prueba.epl @@ -0,0 +1,47 @@ +[- + $ret = shift; + + use Data::Dumper; + + Execute('./../perl/Samurai/Perm.epl'); + + $udat{user}='mmarre@mecon'; + + $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"; + } + else { + print "NO TIENE TODOS LOS PERMISOS\n"; + } + + print "tieneO\n"; + if ($ret->{SA_Perm}->{tieneO} (1,2,3,9,3)) { + print "TIENE ALGUNOS DE LOS PERMISOS\n"; + } + else { + print "NO TIENE NINGUNO DE LOS PERMISOS\n"; + } + + 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 "tieneUn\n"; + if ($ret->{SA_Perm}->{tieneUn} (4)){ + print "Tiene el permiso\n"; + } + else { + print "No tiene el permiso\n"; + } +-] diff --git a/samurai_lib/test/prueba.php b/samurai_lib/test/prueba.php index e9993b6..c72bed8 100644 --- a/samurai_lib/test/prueba.php +++ b/samurai_lib/test/prueba.php @@ -7,7 +7,7 @@ print "Prueba Objeto SA_Perm de samurai_lib
"; $permiso = new SA_Perm(1,'mdegan@mecon'); print "
Probando la funcion tiene -> "; -if ($permiso->tiene(1,2,3,4,5,6,7,3)) { +if ($permiso->tiene(1,2)) { print "Tiene todos los permisos
"; } else { @@ -29,4 +29,16 @@ if ($permiso->tieneO(2)) { else { print "No tiene EL permiso
"; } + + +print "
Probando la funcion tieneODevol -> "; +$rr = $permiso->tieneODevol(1,4,3,5,3,6,7,3); + +print "Tiene los siguientes permisos
"; +foreach ($rr as $r) { + print "$r
"; +} + + + ?> -- 2.43.0