]> git.llucax.com Git - mecon/samurai.git/blob - lib_perl/Perm.epl
Manazar agrego la siguiente funcionalidad a lib_perl/Perm.epl: Ahora se pueden asigna...
[mecon/samurai.git] / lib_perl / Perm.epl
1 [# 
2  vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4 ft=perl:
3  +--------------------------------------------------------------------+
4  |                      Ministerio de Economía                        |
5  |                             SAMURAI                                |
6  +--------------------------------------------------------------------+
7  | This file is part of SAMURAI.                                      |
8  |                                                                    |
9  | SAMURAI is free software; you can redistribute it and/or modify    |
10  | it under the terms of the GNU General Public License as published  |
11  | by the Free Software Foundation; either version 2 of the License,  |
12  | or (at your option) any later version.                             |
13  |                                                                    |
14  | SAMURAI is distributed in the hope that it will be useful, but     |
15  | WITHOUT ANY WARRANTY; without even the implied warranty of         |
16  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU   |
17  | General Public License for more details.                           |
18  |                                                                    |
19  | You should have received a copy of the GNU General Public License  |
20  | along with SAMURAI; if not, write to the Free Software Foundation, |
21  | Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA      |
22  +--------------------------------------------------------------------+
23  | Creado: vie oct 17 15:21:05 ART 2003                               |
24  | Autor:  Martin Marrese <mmarre@mecon.gov.ar>                       |
25  +--------------------------------------------------------------------+
26  $Id$
27
28  Libreria para el manejo de permisos para perl.
29 #]
30 [!
31 $CLEANUP{'SAMURAI_Perm'} = 0;
32
33 use Data::Dumper;
34
35
36 # Simil Constructor.
37 #
38 # @param  string $login Login del usuario para el cual obtener los permisos.
39 # @param  int    $sistema Sistema con el cual se va a trabajar.
40 #
41 # @return void
42 $SAMURAI_Perm->{new} = sub
43 {
44     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";
45     $udat{SAMURAI_Perm_vars}{login} = @_[0];
46     $udat{SAMURAI_Perm_vars}{id_sistema} = @_[1];
47     ##Conexion con la base
48     #TODO Cambiar los parametros de conexion segun corresponda.
49     my $dbh = DBI->connect('dbi:mysql:dbname=samurai;host=bal747f',"intranet","intranet");
50     ##Obtengo los permisos de la base        
51     $re = $dbh->prepare($sql);
52     $re->execute($udat{SAMURAI_Perm_vars}{login});        
53     while ($r = $re->fetchrow_hashref()) {
54         push (@{$permisos{$r->{sistema}}}, $r->{permiso});
55     }        
56     $re->finish();             
57     #Desconexion con la base
58     $dbh->disconnect;          
59     $udat{SAMURAI_Perm_vars}{permisos} = \%permisos; #Se asignan a $udat para que esten disponibles siempre        
60 };       
61
62 # Set Sistema.
63 #
64 # @param  int $sistema Sistema.
65 #
66 # @return void
67 $SAMURAI_Perm->{setSistema} = sub
68 {
69     $udat{SAMURAI_Perm_vars}{id_sistema} = @_[0];
70 };
71
72 # Verifica si tiene un permiso.
73 # Se puede pasar parametros variables con un identificador de permiso, 
74 # por ejemplo: 
75 # $ret->{SAMURAI_PERM}->{tiene}(1, 4, 12); 
76 #
77 # Si tiene algun permiso devuelve true. Si no se pasa ningun parametro 
78 # ($perm->tiene()), devuelve true si tiene un permiso (al menos uno) en el 
79 # sistema actual.
80 #
81 # @return bool
82 $SAMURAI_Perm->{tiene} = sub
83 {
84     if (!scalar(@_)) {         
85         #Devuelvo true si tiene al menos un permiso
86         if (scalar ($udat{SAMURAI_Perm_vars}{permisos}{$udat{SAMURAI_Perm_vars}{id_sistema}})) {
87             return 1;
88         }
89         else {
90             return 0;
91         }
92     }
93     else {
94         foreach $arg (@_) {
95             foreach $perm (@{$udat{SAMURAI_Perm_vars}{permisos}{$udat{SAMURAI_Perm_vars}{id_sistema}}}) {
96                 if ($arg == $perm) {
97                     return 1;
98                 }
99             }
100         }
101         return 0;
102     }
103 };
104
105 # Obtiene una lista de permisos. Si se especifica un sistema, obtiene la lista de permisos para ese sistema.                                
106 #
107 # @param  int $sistema Sistema del cual obtener la lista de permisos.                                                                       
108 #
109 # @return array
110 $SAMURAI_Perm->{getPermisos} = sub
111 {
112     if (!scalar(@_)) {
113         return $udat{SAMURAI_Perm_vars}{permisos}{$udat{SAMURAI_Perm_vars}{id_sistema}};
114     }
115     else {
116         return $udat{SAMURAI_Perm_vars}{permisos}{@_[0]};
117     }
118 };
119
120 # Chequea si un usuario puede acceder o no a una pagina. En caso de no tener
121 # permisos automaticamente lo redirige a una pagina de error.
122 #
123 # @return void
124 $SAMURAI_Perm->{chequear} = sub
125 {
126     if (!$ret->{SAMURAI_Perm}->{tiene} (@_)) {
127         open (ARCHORIG , "/var/www/meconlib/lib/MECON/includes/no_autorizado.html") or  die "POROTO";
128         while (my $linea = <ARCHORIG>) {
129             print $linea
130         }
131         exit;
132     }
133 };
134
135 # Obtiene las observaciones de un permiso para un sistema.                                                                                  
136 #
137 # @param  int $perm Obtiene las observaciones de un permiso para un sistema.
138 # @param  int $sistema Sistema al cual pertenecen los permisos.                                                                             
139 #
140 # @return array
141 $SAMURAI_Perm->{getObservaciones} = sub
142 {
143     $perm = @_[0];
144     if (scalar(@_[1])) {
145         $sistema = @_[1];    
146     }
147     else {
148         $sistema = $udat{SAMURAI_Perm_vars}{id_sistema};
149     }
150     if (!$udat{SAMURAI_Perm_vars}{observaciones}{$sistema}{$perm}) {
151         $udat{SAMURAI_Perm_vars}{observaciones} = '';
152         $sql = 'SELECT ps.observaciones AS observaciones FROM samurai.perm_sist AS ps WHERE ps.id_permiso = ? AND ps.id_sistema = ?';
153         #TODO cambiar los parametros de conexion segun corresponda
154         my $dbh = DBI->connect('dbi:mysql:dbname=samurai;host=bal747f',"intranet","intranet");
155         $re = $dbh->prepare($sql);
156         $re->execute($perm, $sistema);        
157         while ($r = $re->fetchrow_hashref()) {
158             push (@{$obser{$sistema}{$perm}}, $r->{observaciones});
159         }        
160         $re->finish();             
161         #Desconexion con la base
162         $dbh->disconnect;          
163         $udat{SAMURAI_Perm_vars}{observaciones} = \%obser;
164         return $udat{SAMURAI_Perm_vars}{observaciones};
165     }
166 };
167
168 # MANAZAR: Funcion para dar un perfil a un usuario en un sistema
169 #
170 # @return void
171 $SAMURAI_Perm->{asignarPerfil} = sub
172 {
173     $id_perfil = @_[0];
174         my $login=$udat{SAMURAI_Perm_vars}{login};
175         my $id_sistema=$udat{SAMURAI_Perm_vars}{id_sistema};
176         my $resp=$udat{'user'};
177         my $sql = "REPLACE INTO perfil_sist_usuario (login,id_perfil,id_sistema,responsable) VALUES ('$login',$id_perfil,$id_sistema,'$resp')";
178         ##Conexion con la base
179         #TODO Cambiar los parametros de conexion segun corresponda.
180         my $dbh = DBI->connect('dbi:mysql:dbname=samurai;host=bal747f',"intranet","intranet");
181         my $result=$dbh->do($sql);
182     #Desconexion con la base
183         $dbh->disconnect;  
184 };
185
186 # MANAZAR: Funcion para quitar perfil a un usuario en un sistema
187 #
188 # @return void
189 $SAMURAI_Perm->{quitarPerfil} = sub
190 {
191     $id_perfil = @_[0];
192         my $login=$udat{SAMURAI_Perm_vars}{login};
193         my $id_sistema=$udat{SAMURAI_Perm_vars}{id_sistema};
194         my $resp=$udat{'user'};
195         my $sql = "DELETE FROM perfil_sist_usuario where (login='$login') AND (id_perfil=$id_perfil) AND (id_sistema=$id_sistema)";
196         ##Conexion con la base
197         #TODO Cambiar los parametros de conexion segun corresponda.
198         my $dbh = DBI->connect('dbi:mysql:dbname=samurai;host=bal747f',"intranet","intranet");
199         my $result=$dbh->do($sql);
200     #Desconexion con la base
201         $dbh->disconnect;  
202 };
203
204
205
206 !]
207 [-
208     $ret = shift;
209     $ret->{SAMURAI_Perm} = $SAMURAI_Perm;
210 -]  
211