+$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 = ?';