--- /dev/null
+[#
+ 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 <mmarre@mecon.gov.ar> |
+ +--------------------------------------------------------------------+
+ $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 = <ARCHORIG>) {
+ 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;
+-]
+
+[#
+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.<br>';
+ $ret->{SAMURAI_Perm}->{new} ('mmarre@mecon', 666);
- $udat{user}='mmarre@mecon';
+ print 'Seteo otro sistema para trabajar<br>';
+ $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<br>';
+ if ($ret->{SAMURAI_Perm}->{tiene} ()) {
+ print 'Tiene al menos un permiso en el sistema '. $udat{SAMURAI_Perm_vars}{id_sistema}.'<BR>';
}
else {
- print "NO TIENE TODOS LOS PERMISOS\n";
+ print 'No tiene permisos en el sistema '. $udat{SAMURAI_Perm_vars}{id_sistema}.'<BR>';
}
- 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.<br>';
+ if ($ret->{SAMURAI_Perm}->{tiene} (61,602)) {
+ print 'Tiene al menos uno de los permisos en el sistema '. $udat{SAMURAI_Perm_vars}{id_sistema}.'<BR>';
}
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}.'<BR>';
}
+
+ print 'Obtengo los permisos del sistema en el cual estoy trabajando.<br>';
+ $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 '<br>Obtengo los permisos del sistema 61 <br>';
+ $tmp = $ret->{SAMURAI_Perm}->{getPermisos} (61);
+ print Dumper($tmp);
+ print '<br>';
+
+ print 'Pruebo la funcion chequear<BR>';
+# $ret->{SAMURAI_Perm}->{chequear} (61);
+ print 'Si aparece esto es porque tenia al menos uno de los permisos que se pasaron como parametro<br>';
- 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<br>';
+# $tmp = $ret->{SAMURAI_Perm}->{getObservaciones} (66,61);
+# print Dumper(\%tmp);
+
+# print Dumper($udat{SAMURAI_Perm_vars}{observaciones});
+
+ print '<br><br>FINALE PRESTO CON TUTTI<br>';
-]