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