]> git.llucax.com Git - mecon/samurai.git/blobdiff - lib_perl/Perm.epl
Modificaciones para el molesto de Hernan.
[mecon/samurai.git] / lib_perl / Perm.epl
index 43e19ed7b02c2cf1b01d3e9a032ac05f9dfd530d..fb8810f1a664c949b65996df926e6a5d6f48b85d 100644 (file)
-[#
-  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 <mmarre@mecon.gov.ar>                       |
-  +--------------------------------------------------------------------+
-   
-   $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 <mmarre@mecon.gov.ar>                       |
+ +--------------------------------------------------------------------+
+ $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 = <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 = ?';
         ##Conexion con la base
         ##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 = $dbh->prepare($sql);
-        $re->execute($udat{SA_Perm_Id_Sistema}, $udat{user});        
+        $re->execute($perm, $sistema);        
         while ($r = $re->fetchrow_hashref()) {
         while ($r = $re->fetchrow_hashref()) {
-            push (@tmp, $r->{id_permiso});
+            push (@{$obser{$sistema}{$perm}}, $r->{observaciones});
         }        
         $re->finish();             
         }        
         $re->finish();             
-        
         #Desconexion con la base
         $dbh->disconnect;          
         #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 = shift;
-    $ret->{SA_Perm} = $SA_Perm;
+    $ret->{SAMURAI_Perm} = $SAMURAI_Perm;
 -]  
 -]  
-        
+