Modificaciones futuras seran aceptadas......
--- /dev/null
+{\rtf0\ansi\r
+{\fonttbl\r
+{\f0\fswiss Helvetica;}\r
+{\f1\fmodern Courier;}}\r
+{\info\r
+{\creatim \yr2003\mo3\dy12\hr14\min49\sec5}\r
+{\revtim \yr2003\mo3\dy12\hr15\min12\sec17}\r
+}\r
+\paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\r
+\ftnbj\aenddoc\ftnrstcont\aftnrstcont\ftnnar\aftnnrlc\r
+\sectd\r
+\f1\fs20\b SAMURAI - samurai_lib - PHP\par\r
+para ser usada en sistemas hechos en PHP\par\r
+\par\r
+\ul Funcionamiento\par\r
+Objeto:\b0\ul0 \b SA_Perm\par\r
+\ul Variables de Instancia:\par\r
+\ul0 - login \par\r
+\b0 Contiene el login del usuario que se obtiene de $udat.\par\r
+\b - sistema \par\r
+ \b0 Contiene el identificador numerico del sistema.\par\r
+\b - permisos\par\r
+ \b0 Array con todos los permisos del usuario en el sistema dado. \r
+\par\r
+ Es "invisible" a los demas.\par\r
+\b - DB \par\r
+ \b0 Objeto que guarda la conexion con la base de datos. Es \r
+"invisible"\par\r
+ a los demas.\par\r
+\b\ul Metodos de Instancia:\par\r
+\ul0 - SA_Perm \par\r
+ \b0 Constructor. Recive como parametro el identificador numerico del\r
+\par\r
+ sistema y el login del usuario (del tipo <usuario>@<organismo>)\par\r
+\b - tiene \par\r
+ \b0 Funcion que chequea que el usuario tenga todos los permisos que \r
+se\par\r
+ pasaron como parametro. Devuelve true si cumple con la condicion, \r
+\par\r
+ false en cualquier otro caso.\par\r
+\b - tieneO \par\r
+ \b0 Funcion que chequea que el usuario tenga alguno de los permisos \r
+que\par\r
+ se pasaron como parametro. Devuelve true si cumple con la condicion,\r
+\par\r
+ false en cualquier otro caso.\par\r
+\b - tieneODevol\par\r
+ \b0 Funcion que chequea que el usuario tenga alguno de los permisos \r
+que\par\r
+ se pasaron como parametro. Devuelve un array con aquellos permisos\r
+\par\r
+ que se pararon por parametro y el usuario tiene.\par\r
+\b - tieneUn\par\r
+ \b0 Funcion que chequea que el usuario tenga el permiso que se pasa \r
+por \par\r
+ por parametro.\par\r
+\b - _obtenerPermisos\par\r
+ \b0 Funcion de uso interno que consulta a la base y obtiene todos \r
+los\par\r
+ permisos del usuario en el sistema que se paso como parametro.\par\r
+\b - _conectarDB\par\r
+ \b0 Funcion que crea la conexion a la base de datos. Es de uso \r
+interno.\par\r
+\par\r
+\par\r
+-------------------------------------\par\r
+Autores : Martin Marrese\par\r
+-------------------------------------\par\r
+Fecha : 12/03/2003\par\r
+Fecha Ultima Modificacion: 12/03/2003\par\r
+------------------------------------- \par\r
+$Id$\par\r
+$Author$\par\r
+$Date$\par\r
+$Url$\par\r
+$Rev$\par\r
+}\r
--- /dev/null
+[#
+ 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$
+#]
+[!
+ $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;
+-]
+
--- /dev/null
+[#
+ $Id$
+
+ $URL$
+ $Rev$
+ $Date$
+ $Author$
+#]
+
+[!
+ $CLEANUP{'db_conf'} = 0;
+ $db_conf = {
+ 'db_type' => 'mysql' ,
+ 'db_user' => 'intranet' ,
+ 'db_pass' => 'intranet' ,
+ 'db_host' => 'localhost',
+ 'db_name' => 'samurai'
+ };
+!]
+[-
+ $ret = shift;
+ $ret->{SA_Perm}->{db_conf} = $db_conf;
+-]
+
--- /dev/null
+[#
+ $Id$
+
+ $URL$
+ $Rev$
+ $Date$
+ $Author$
+#]
+
+[!
+ $CLEANUP{'sql_Conf'} = 0;
+ $sql_Conf = {
+ 'obtener_p_p_completo' => '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'
+ };
+!]
+[-
+ $ret = shift;
+ $ret->{SA_Perm}->{sql_Conf} = $sql_Conf;
+-]
+
--- /dev/null
+[- Execute('*') -]
return $result;
}
- /**
+ /**
* Verifica los permisos de un usuario
*
* Compara los permisos que tiene un usuario en relacion a los
return $result;
}
- /**
+ /**
+ * Verifica los permisos de un usuario
+ *
+ * Compara los permisos que tiene un usuario en relacion a los
+ * pasados como parametro. Devuelve un array con aquellos permisos que
+ * el usuario tiene. Funciona similar a tieneO solo que devuelve un array.
+ * Es de parametros variables, y siempre necesita al menos UN parametro
+ *
+ * @param array $permisos Permisos que se buscan
+ *
+ * @return array Permisos que tiene el usuario pasados por parametro, o 'ERROR' en caso contrario
+ *
+ * @access public
+ */
+ function tieneODevol ()
+ {
+ $args = func_get_args(); //Obtengo los permisos que me pasaron como argumento
+ $result = array();
+
+ if (!count($args)) {
+ $result['0'] = 'ERROR'; //Siempre se debe pasar al menos un permiso a buscar
+ }
+ else {
+ $result = array_intersect($args, $this->permisos);
+ }
+ return $result;
+ }
+
+ /**
* Verifica los permisos de un usuario
*
* Compara un permiso pasado por parametro con los que tiene el usuario
return array(
'obtener_p_p_completo' => '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'
+ WHERE psu.id_sistema = ? AND login = ? AND psu.id_perfil = pps.id_perfil'
);
?>
--- /dev/null
+[- Execute('*') -]
--- /dev/null
+[-
+ $ret = shift;
+
+ use Data::Dumper;
+
+ Execute('./../perl/Samurai/Perm.epl');
+
+ $udat{user}='mmarre@mecon';
+
+ $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";
+ }
+ else {
+ print "NO TIENE TODOS LOS PERMISOS\n";
+ }
+
+ print "tieneO\n";
+ if ($ret->{SA_Perm}->{tieneO} (1,2,3,9,3)) {
+ print "TIENE ALGUNOS DE LOS PERMISOS\n";
+ }
+ else {
+ print "NO TIENE NINGUNO DE LOS PERMISOS\n";
+ }
+
+ 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 "tieneUn\n";
+ if ($ret->{SA_Perm}->{tieneUn} (4)){
+ print "Tiene el permiso\n";
+ }
+ else {
+ print "No tiene el permiso\n";
+ }
+-]
$permiso = new SA_Perm(1,'mdegan@mecon');
print "<BR>Probando la funcion tiene -> ";
-if ($permiso->tiene(1,2,3,4,5,6,7,3)) {
+if ($permiso->tiene(1,2)) {
print "Tiene todos los permisos<BR>";
}
else {
else {
print "No tiene EL permiso<BR>";
}
+
+
+print "<BR>Probando la funcion tieneODevol -> ";
+$rr = $permiso->tieneODevol(1,4,3,5,3,6,7,3);
+
+print "Tiene los siguientes permisos<BR>";
+foreach ($rr as $r) {
+ print "$r<BR>";
+}
+
+
+
?>