Hola Jose
Yo lo hago asi:
1. En una tabla tengo las opciones de todos los sistemas (opciones.dbf)
2. En otra tabla tengo a los usuarios (usuarios.dbf)
3. En otra tabla tengo la Relacion de Usuarios+Opciones (Accesos.dbf)
Asi se ve el mantenimiento de los accesos
Luego para desplegar los menus lo hago asi:
Static _Amnp,_Asmn
***********************************************************
Function Main
If Check_clav()
Get_opc_men()
Define Brush oBru Style Bricks
Define Font oFon Name 'Arial' Weight -8
Define Window oWind Title 'Sistema De Planillas' ;
Brush oBru Menu Menu1(oWind)
Set Message Of oWind To 'Medicina Externa S.A.' Clock Date
Activate Window oWind Maximized
Endif
Return(Nil)
*********************************************************
Function Menu1(oWind)
Local oMenu,I,J
Menu oMenu
For I=1 To Len(_Amnp)
MenuItem Alltrim(Left(_Amnp[I],30))
Menu
For J=1 To Len(_Asmn)
If Subs(_Amnp[I],31,2)=Subs(_Asmn[J],31,2)
MenuItem Alltrim(Left(_Asmn[J],30))
Endif
Next I
EndMenu
Next I
EndMenu
Return oMenu
************************************************************
Function Get_opc_men()
_Amnp:={}
_Asmn:={}
Select A
Net_use('Men_opci',.F.,3)
Set Index To ('Men_opci')
Seek Vsystem
Do While !Eof() .And. A->Men_sist=Vsystem
If A->Status#' ' //.Or. Len(Alltrim(A->Men_nive))>2
Skip
Loop
Endif
If Len(Alltrim(A->Men_nive))=2
Aadd(_Amnp,Left(Alltrim(A->Men_dscr)+Space(30),30)+A->en_nive)
Endif
If Len(Alltrim(A->Men_nive))=4
Aadd(_Asmn,Left(Alltrim(A->Men_dscr)+Space(30),30)+A->Men_nive)
Endif
Skip
Enddo
Close DataBases
Return(Nil)
***********************************************************
y asi queda