Francisco: estás en todas. Sos un maestro. Y eso que estás en Capilla. Desde
New York no se como sería la cosa!!!
Te felicito.
NRS
Enviado desde WindowsPhone
-----Mensaje original-----
De: francisco prieto
Enviado: 05/07/2013 13:34
Para: GUFA List Member
Asunto: [GUFA] Re: [GUFA] Manejar seguridad a nivel Menú
Fabian,
Eso lo tengo armado. Te paso un ejemplo de lo que hago básicamente.
Local lcNomPop, I, lcNomPad, ;
lcAntOrd, lcMenu, lcUsuario, ;
lcProgra, lcNomPop1, lcLanzar, lcDefault,llHuboError
Set Sysmenu To
Set Sysmenu Automatic
lnOpHab=0
llDepurar=.T.
If _Screen.Demo
lcUsuario = "ADMINISTRADOR"
Else
lcUsuario = Upper(_Screen.UsrName)
Endif
Use cMenues Order Orden2 && Incluida en el ejecutable
lcSql="SELECT USUARIO"+;
",APE_NOM"+;
",SECTOR"+;
",NIVEL"+;
",PUESTO"+;
",IDUSUARIO"+;
",PASS"+;
",ADMINISTRA"+;
",HISTPASS"+;
" FROM USUARIOS "+;
"Where RTRIM(Usuario)+'_'='"+Alltrim(lcUsuario)+"_'"
If !Thisform.ConsultaMotor(Thisform,lcSql,"cUsuarios")
llHuboError=.T.
Endif
If !llHuboError
lcSql="SELECT AREA_SOLIC"+;
" FROM PARAM "
If !Thisform.ConsultaMotor(Thisform,lcSql,"cParam")
llHuboError=.T.
Endif
Endif
If !llHuboError
If cUsuarios.Administra
lcSql="SELECT ORDEN "+;
", (Select COUNT(*) from MENUES b where
LEFT(b.ORDEN,LEN(Menues.Orden))=MENUES.ORDEN)-1 Hijos"+;
",MENU"+;
",AREA"+;
",JERARQUIA"+;
",cast(0 as Int) NroBar"+;
" FROM MENUES"+;
" ORDER BY ORDEN"
Else
lcSql="SELECT ORDEN "+;
", (Select COUNT(*) from MENUES b where
LEFT(b.ORDEN,LEN(Menues.Orden))=MENUES.ORDEN)-1 Hijos"+;
",MENU"+;
",AREA"+;
",JERARQUIA"+;
",cast(0 as Int) NroBar"+;
" FROM MENUES"+;
" Where Orden in (Select distinct orden from ACCESO where SECTOR
='"+cUsuarios.Sector+"' and NIVEL<='"+Transform(cUsuarios.Nivel,"@l
99")+"')"+;
" ORDER BY Menues.ORDEN "
Endif
IF !Thisform.ConsultaMotor(Thisform,lcSql,"cMenu")
llHuboError=.t.
ENDIF
ENDIF
IF !llHuboError
Thisform.cntprogreso1.Reset(3)
Thisform.cntprogreso1.Mensaje="Armando el Primer Nivel de los Menues"
Thisform.cntprogreso1.Updcontrol()
If llDepurar
=Strtofile('','mimenu.mpr',0)
Endif
Select cMenues
I=0
Scan
If Len(Alltrim(cMenues.Orden)) = 2
lcNomPad = "PAD"+Alltrim(cMenues.Orden)
lcNomPop = "POP" +Alltrim(cMenues.Orden)
Define Pad &lcNomPad Of _Msysmenu Prompt Alltrim(cMenues.Programa) Color
Scheme 4
On Pad &lcNomPad Of _Msysmenu Activate Popup &lcNomPop
If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
Define Pad <<lcNomPad>> Of _Msysmenu Prompt '<<Alltrim(cMenues.Programa)>>'
COLOR Scheme 4
On Pad <<lcNomPad>> Of _Msysmenu Activate Popup <<lcNomPop>>
ENDTEXT
=Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
Endif
Endif
I=I+1
Wait Windows ("leyendo menues"+Str(I,2)) Nowait
Endscan
Wait Clear
Thisform.Items=I
Thisform.cntprogreso1.Mensaje="Armando el Segundo Nivel de los Menues"
Thisform.cntprogreso1.Updcontrol()
Select cMenu
I = 0
lcAntPad = ''
Scan
If !Empty(cMenu.Area)
If (Val(cParam.Area_solic)=0 Or Val(cParam.Area_solic)=0) And
cParam.Area_solic#cMenu.Area
Loop
Endif
Endif
*=Seek(Alltrim(cMenu.Orden)+"_","cMenues","Orden")
=Seek(Val(cMenu.Orden),"cMenues","Orden2")
If Len(Alltrim(cMenu.Orden)) = 4
lcNomPop1 = "POP" + Alltrim(cMenu.Orden)
lcNomPop = "POP" + Left(Alltrim(cMenu.Orden),2)
lcNomPad = "PAD" + Left(Alltrim(cMenu.Orden),2)
If !Popup(lcNomPop)
Define Popup &lcNomPop Margin Relative Shadow Font 'arial', 9 Style 'I'
Color Scheme 5
If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
Define Popup <<lcNomPop>> Margin Relative Shadow Font 'arial', 9 Style 'I'
Color Scheme 5
ENDTEXT
=Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
Endif
Endif
If lcAntPad==lcNomPad
I=I+1
Else
lcAntPad=lcNomPad
I=1
Endif
If Inlist(cMenues.Tipo,"C","P")
lcProgra=Alltrim(cMenues.Programa)
Else
lcProgra=''
Endif
lnOpHab=lnOpHab+1
Define Bar I Of &lcNomPop Prompt
Iif(cMenues.Habilitada,'','\')+Alltrim(cMenu.Menu)
If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
Define Bar <<I>> Of <<lcNomPop>> Prompt
'<<Iif(cMenues.Habilitada,'','\')+Alltrim(cMenu.Menu)>>'
ENDTEXT
=Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
Endif
If cMenu.Hijos=0
If !Empty(lcProgra)
If cMenues.Tipo == 'C'
On Selection Bar I Of &lcNomPop &lcProgra
If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
On Selection Bar <<I>> Of <<lcNomPop>> <<lcProgra>>
ENDTEXT
=Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
Endif
Else
lcLanzar = lcProgra + ' With "' + Alltrim(cMenu.Orden) + '"'
On Selection Bar I Of &lcNomPop &lcLanzar
If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
On Selection Bar <<I>> Of <<lcNomPop>> <<lcLanzar>>
ENDTEXT
=Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
Endif
Endif
Endif
Else
Replace NroBar With I In cMenu
Endif
Endif
Endscan
Thisform.cntprogreso1.Mensaje="Armando el Tercer Nivel de los Menues"
Thisform.cntprogreso1.Updcontrol()
Select cMenu
I = 0
lcAntPad = ''
lnNroBar=0
Scan
If !Empty(cMenu.Area)
If (Val(cParam.Area_solic)=0 Or Val(cParam.Area_solic)=0) And
cParam.Area_solic#cMenu.Area
Loop
Endif
Endif
=Seek(Val(cMenu.Orden),"cMenues","Orden2")
If Len(Alltrim(cMenu.Orden)) = 4
lnNroBar=cMenu.NroBar
Endif
If Len(Alltrim(cMenu.Orden)) = 6
lcNomPop1 = "POP" + Left(Alltrim(cMenu.Orden),4)
lcNomPop = "POP" + Left(Alltrim(cMenu.Orden),2)
On Bar lnNroBar Of &lcNomPop Activate Popup &lcNomPop1
If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
On Bar <<lnNroBar>> Of <<lcNomPop>> Activate Popup <<lcNomPop1>>
ENDTEXT
=Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
Endif
If !Popup(lcNomPop1)
Define Popup &lcNomPop1 Margin Relative Shadow Color Scheme 4
If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
Define Popup <<lcNomPop1>> Margin Relative Shadow Color Scheme 4
ENDTEXT
=Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
Endif
Endif
If Inlist(cMenues.Tipo,"C","P")
lcProgra=Alltrim(cMenues.Programa)
Else
lcProgra=''
Endif
lnOpHab=lnOpHab+1
If lcAntPad==lcNomPop1
I=I+1
Else
lcAntPad=lcNomPop1
I=1
Endif
Define Bar I Of &lcNomPop1 Prompt
Iif(cMenues.Habilitada,'','\')+Alltrim(cMenu.Menu)
If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
Define Bar <<I>> Of <<lcNomPop1>> Prompt
'<<Iif(cMenues.Habilitada,'','\')+Alltrim(cMenu.Menu)>>'
ENDTEXT
=Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
Endif
If !Empty(lcProgra)
If cMenues.Tipo == 'C'
On Selection Bar I Of &lcNomPop1 &lcProgra
If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
On Selection Bar <<I>> Of <<lcNomPop1>> <<lcProgra>>
ENDTEXT
=Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
Endif
Else
lcLanzar = lcProgra + ' With "' + Alltrim(cMenu.Orden) + '"'
On Selection Bar I Of &lcNomPop1 &lcLanzar
If llDepurar
TEXT TO lcLinea TEXTMERGE NOSHOW PRETEXT 3
On Selection Bar <<I>> Of <<lcNomPop1>> <<lcLanzar>>
ENDTEXT
=Strtofile(lcLinea+Chr(13)+Chr(10),'mimenu.mpr',1)
Endif
Endif
Endif
Endif
Endscan
Thisform.cntprogreso1.Reset()
Endif
Return (lnOpHab)
Saludos,
[No se incluye el mensaje original completo.]