X-Git-Url: https://git.llucax.com/mecon/samurai.git/blobdiff_plain/f209b333eae3c22b3ce1da39325f96ad1ba473ac..HEAD:/lib_perl/Perm.epl diff --git a/lib_perl/Perm.epl b/lib_perl/Perm.epl index 43e19ed..fb8810f 100644 --- a/lib_perl/Perm.epl +++ b/lib_perl/Perm.epl @@ -1,148 +1,227 @@ -[# - 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 - +$CLEANUP{'SAMURAI_Perm'} = 0; + +use Data::Dumper; + +# Parser para el ini de configuracion +# +# @return hash +$SAMURAI_Perm->{parse_ini} = sub +{ + use Config::IniFiles; + my $cfg = new Config::IniFiles( -file => + "/var/www/sistemas/samurai/lib_perl/consultasDB.ini" ); + $dsn->{dsn} = $cfg->val('conf', 'dsn'); + $dsn->{user} = $cfg->val('conf', 'user'); + $dsn->{password} = $cfg->val('conf', 'password'); + return $dsn; +}; + + +# 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 + $dns = $ret->{SAMURAI_Perm}->{parse_ini} (); + my $dbh = DBI->connect($dsn->{dsn}, $dsn->{user}, $dsn->{password}); + ##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 +$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 = ?'; ##Conexion con la base - $dbh = DBI->connect('dbi:mysql:dbname=samurai;host=localhost',"intranet","intranet"); - - ##Obtengo los permisos de la base + $dns = $ret->{SAMURAI_Perm}->{parse_ini} (); + my $dbh = DBI->connect($dsn->{dsn}, $dsn->{user}, $dsn->{password}); $re = $dbh->prepare($sql); - $re->execute($udat{SA_Perm_Id_Sistema}, $udat{user}); + $re->execute($perm, $sistema); while ($r = $re->fetchrow_hashref()) { - push (@tmp, $r->{id_permiso}); + push (@{$obser{$sistema}{$perm}}, $r->{observaciones}); } $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; - }; + $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 + $dns = $ret->{SAMURAI_Perm}->{parse_ini} (); + my $dbh = DBI->connect($dsn->{dsn}, $dsn->{user}, $dsn->{password}); + 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 + $dns = $ret->{SAMURAI_Perm}->{parse_ini} (); + my $dbh = DBI->connect($dsn->{dsn}, $dsn->{user}, $dsn->{password}); + ##Conexion con la base + my $result=$dbh->do($sql); + #Desconexion con la base + $dbh->disconnect; +}; + + + !] [- $ret = shift; - $ret->{SA_Perm} = $SA_Perm; + $ret->{SAMURAI_Perm} = $SAMURAI_Perm; -] - +