[# 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; -]