]> git.llucax.com Git - mecon/samurai.git/blob - lib_perl/Perm.epl
Ahora sel-sistema solo muestra los sistemas a los cuales el usuario tiene acceso...
[mecon/samurai.git] / lib_perl / Perm.epl
1 [#
2   vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4:
3   +--------------------------------------------------------------------+
4   |                    SAMURAI  - Samurai_Lib                          |
5   +--------------------------------------------------------------------+
6   |   Sistema de Administracion y Matenimiento de Usuarios Relativo A  |
7   |                             Intranet                               |
8   |                      Ministerio de Economía                        |
9   +--------------------------------------------------------------------+
10   | Creado: $Date$                                                     |
11   | Autor:  Martin Marrese <mmarre@mecon.gov.ar>                       |
12   +--------------------------------------------------------------------+
13    
14    $Id$
15     
16     $URL$
17     $Rev$
18     $Date$
19     $Author$                     
20 #]
21 [!
22     $CLEANUP{'SA_Perm'} = 0;
23     ###CONSTRUCTOR 
24     ## in: sistema -> identificador numerico del sistema
25     ##     login se obtiene automaticamente en $udat{user}
26     ##
27     ## out: bool ok
28     $SA_Perm->{SA_Perm} = sub
29     {
30         
31         $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";               
32         
33         $udat{SA_Perm_Id_Sistema} = @_[0];
34         $result  = true; #asumo que no va a fallar
35         
36         ##Conexion con la base
37         $dbh = DBI->connect('dbi:mysql:dbname=samurai;host=localhost',"intranet","intranet");
38         
39         ##Obtengo los permisos de la base        
40         $re = $dbh->prepare($sql);
41         $re->execute($udat{SA_Perm_Id_Sistema}, $udat{user});        
42         while ($r = $re->fetchrow_hashref()) {
43             push (@tmp, $r->{id_permiso});
44         }        
45         $re->finish();             
46         
47         #Desconexion con la base
48         $dbh->disconnect;          
49         $udat{SA_Permisos} = \@tmp;#Se asignan a $udat para que esten disponibles siempre        
50         
51         return $result;
52     };       
53
54     ###TIENE
55     ## Verifica que el usuario tenga todos los permisos que se pasan como
56     ## parametro.
57     ## in: permisos a buscar
58     ##
59     ## out: int 1 -> ok, 0 -> nok
60     $SA_Perm->{tiene} = sub
61     {
62         $result = 1;   #asumo que no va a fallar
63         if (!scalar(@_)) {
64             $result = 0; #Siempre debe haber como minimo un permiso a comparar
65         }
66         else {
67             @rr = $ret->{SA_Perm}->{tieneODevol} (@_);
68             if (scalar(@_) != scalar(@rr)) {
69                 $result = 0;
70             }
71         }
72         return $result;
73     };
74
75     ###TIENEO
76     ## Verifica que el usuario tenga alguno de  los permisos que se pasan como
77     ## parametro.
78     ## in: permisos a buscar
79     ##
80     ## out: int 1 -> ok, 0 -> nok
81     $SA_Perm->{tieneO} = sub
82     {
83         $result = 1;   #asumo que no va a fallar
84         if (!scalar(@_)) {
85             $result = 0; #Siempre debe haber como minimo un permiso a comparar
86         }
87         else {
88             @rr = $ret->{SA_Perm}->{tieneODevol} (@_);            
89             if (!scalar(@rr)) {
90                 $result = 0;
91             }
92         }
93         return $result;
94     };
95
96     ###TIENEUN
97     ## Verifica que el usuario tenga un permiso que se pasa como
98     ## parametro.
99     ## in: permiso a buscar
100     ##
101     ## out: int 1 -> ok, 0 -> nok
102     $SA_Perm->{tieneUn} = sub
103     {
104         $result = 1;   #asumo que no va a fallar
105         if (!scalar(@_)) {
106             $result = 0; #Siempre debe haber un permiso a comparar
107         }
108         else {
109             @rr = $ret->{SA_Perm}->{tieneODevol} (@_);            
110             if (!scalar(@rr)) {
111                 $result = 0;
112             }
113         }
114         return $result;
115     };
116
117
118
119     ###TIENEODEVOL
120     ## Compara el contenido de dos arrays y devuelve un array con
121     ## aquellos datos que se repiten en ambos.
122     ## in: array permisos a buscar
123     ##
124     ## out: array con coincidencias
125     $SA_Perm->{tieneODevol} = sub 
126     {
127         @result = ();
128         if (!scalar(@_)) {
129             @result[0] = "ERROR"; #Siempre se debe pasar al menos un permiso
130         }    
131         else {
132             foreach $arg (@_) {
133                 foreach $perm (@{$udat{SA_Permisos}}) {
134                     if ($arg == $perm) {
135                         push (@result, $arg);
136                         last;
137                     }
138                 }
139             }
140         }
141         return @result;
142     };
143 !]
144 [-
145     $ret = shift;
146     $ret->{SA_Perm} = $SA_Perm;
147 -]  
148