duda de Menú y permisos de usuarios

duda de Menú y permisos de usuarios

Postby mgsoft » Wed Feb 17, 2010 1:50 pm

Hola:

Pretendo hacer un control de permisos de usuarios para las opciones del Menú.

¿Hay alguna forma de recuperar el Array con todos los elementos del Menú?.

Es decir, estos datos:

MENU oMenu

MENUITEM "&Ficheros"
MENU

MENUITEM "&Auxiliares"
MENU

MENUITEM OemToAnsi( "C¢digos P&ostales" ) ;
RESOURCE "MNUPOSTAL" ;
ACTION Postal() ;
MESSAGE OemToAnsi( "Mantenimiento de C¢digos Postales" )

MENUITEM "P&rovincias" ;
RESOURCE "MNUPROVINCIAS" ;
ACTION Provincias() ;
MESSAGE "Mantenimiento de Provincias"

MENUITEM "&Zonas" ;
RESOURCE "MNUZONAS" ;
ACTION Zonas() ;
MESSAGE OemToAnsi( "Mantenimiento de Zonas de facturaci¢n" )


Muchas gracias. Un saludo
Saludos,

Eduardo
User avatar
mgsoft
 
Posts: 422
Joined: Mon Aug 17, 2009 12:18 pm
Location: España

Re: duda de Menú y permisos de usuarios

Postby jrestojeda » Wed Feb 17, 2010 2:24 pm

Hola...
Yo lo hago así:
Code: Select all  Expand view
MENU oMenu
   MENUITEM aMenuItem[1] PROMPT  "&Ventas"
   MENU

      MENUITEM aMenuItem[2] PROMPT "ABM de clientes"+CHR(9)+"CTRL+A";
         RESOURCE "CLIEN16";
         ACCELERATOR ACC_CONTROL,ASC("A");
         MESSAGE "ABM de clientes CTRL+A";
         ACTION BrowClientes(oBrush1,oWnd,Empresa,aMenuItem,oBtn1,2)

       MENUITEM aMenuItem[3] PROMPT "Listados";
         RESOURCE "LIST16";
         MESSAGE "Listados de clientes"
         MENU

         MENUITEM aMenuItem[4] PROMPT "Clientes por código";
            RESOURCE "LIST16";
            MESSAGE "Clientes por código";
            ACTION ListClientes(oBrush1,oWnd,Empresa,1,aMenuItem,4)

         MENUITEM aMenuItem[5] PROMPT "Clientes por descripción";
            RESOURCE "LIST16";
            MESSAGE "Clientes por descripción";
            ACTION ListClientes(oBrush1,oWnd,Empresa,2,aMenuItem,5)

         MENUITEM aMenuItem[6] PROMPT "Clientes por domicilio";
            RESOURCE "LIST16";
            MESSAGE "Clientes por domicilio";
            ACTION ListClientes(oBrush1,oWnd,Empresa,3,aMenuItem,6)

         MENUITEM aMenuItem[7] PROMPT "Clientes por localidad";
            RESOURCE "LIST16";
            MESSAGE "Clientes por localidad";
            ACTION ListClientes(oBrush1,oWnd,Empresa,4,aMenuItem,7)

         MENUITEM aMenuItem[8] PROMPT "Clientes por teléfono";
            RESOURCE "LIST16";
            MESSAGE "Clientes por teléfono principal";
            ACTION ListClientes(oBrush1,oWnd,Empresa,5,aMenuItem,8)

         MENUITEM aMenuItem[9] PROMPT "Clientes por lista de precio";
            RESOURCE "LIST16";
            MESSAGE "Clientes por lista de precio";
            ACTION ListClientes(oBrush1,oWnd,Empresa,6,aMenuItem,9)

         ENDMENU
      SEPARATOR

      MENUITEM aMenuItem[10] PROMPT "Cuenta corriente";
         RESOURCE "CUENTA16";
         MESSAGE "Cuenta corriente de clientes"
         MENU

         MENUITEM aMenuItem[11] PROMPT "Facturación de pedidos";
            RESOURCE "FACTU16";
            MESSAGE "Facturación de pedidos por cuenta corriente";
            ACTION FacturaCtaCte(oBrush1,oWnd,Empresa,aMenuItem,oBtn3,oBtn6,11,63)

         MENUITEM aMenuItem[12] PROMPT "Nota de débito";
            RESOURCE "FACTU16";
            MESSAGE "Nota de débito";
            ACTION NotaDebito(oBrush1,oWnd,Empresa,aMenuItem,12)

         MENUITEM aMenuItem[13] PROMPT "Nota de crédito";
            RESOURCE "FACTU16";
            MESSAGE "Nota de crédito";
            ACTION NotaCredito(oBrush1,oWnd,Empresa,aMenuItem,oBtn11,13)

         MENUITEM aMenuItem[14] PROMPT "Ingreso de cobranzas";
            RESOURCE "COBRO16";
            MESSAGE "Emisión de recibos de cobranzas";
            ACTION ReciboCobranza(oBrush1,oWnd,Empresa,aMenuItem,oBtn7,14)
         SEPARATOR

         MENUITEM aMenuItem[15] PROMPT "Anulación de comprobantes";
            RESOURCE "DEPURA16";
            MESSAGE "Anulación de comprobantes de venta";
            ACTION Depura_Ventas(oBrush1,oWnd,Empresa,aMenuItem,oBtn10,15)

         MENUITEM aMenuItem[16] PROMPT "Reimpresión de comprobantes";
            RESOURCE "PRINT16";
            MESSAGE "Reimpresión de comprobantes de venta";
            ACTION RemprimeVentas(oBrush1,oWnd,Empresa,aMenuItem,oBtn8,16)
         SEPARATOR

         MENUITEM aMenuItem[17] PROMPT "Actualización de envases";
            RESOURCE "VACIOS16";
            MESSAGE "Actualización de envases";
            ACTION ActualizaVacios(oBrush1,oWnd,Empresa,Datos,aMenuItem,oBtn9,17)

         MENUITEM aMenuItem[18] PROMPT "Listado de envases por cliente";
            RESOURCE "LIST16";
            MESSAGE "Listado de envases";
            ACTION ListEnvaces(oBrush1,oWnd,Empresa,aMenuItem,18)
         SEPARATOR

         MENUITEM aMenuItem[19] PROMPT "Listados de cuenta corriente";
            RESOURCE "LIST16";
            MESSAGE "Listados de cuenta corriente"
            MENU

            MENUITEM aMenuItem[20] PROMPT "Detalle de cuenta corriente";
               RESOURCE "LIST16";
               MESSAGE "Listado de cuenta corriente detallada";
               ACTION ListCtaCli(oBrush1,oWnd,Empresa,aMenuItem,oBtn12,20)

            MENUITEM aMenuItem[21] PROMPT "Listados de saldos por clientes";
               RESOURCE "LIST16";
               MESSAGE "Listado de saldos de clientes";
               ACTION ListSaldosCli(oBrush1,oWnd,Empresa,aMenuItem,21)
            ENDMENU
         ENDMENU
      SEPARATOR

      MENUITEM aMenuItem[22] PROMPT "Precios Especiales";
         RESOURCE "PRECIOS16";
         MESSAGE "Precios especiales"
         MENU

         MENUITEM aMenuItem[23] PROMPT "Carga de precios especiales";
            RESOURCE "PRECIOS16";
            MESSAGE "Carga de precios especiales por cliente";
            ACTION PrecioEspecial(oBrush1,oWnd,Empresa,aMenuItem,23)

         MENUITEM aMenuItem[24] PROMPT "Clientes con precio especial";
            RESOURCE "LIST16";
            MESSAGE "Listado de clientes con precio especial";
            ACTION ListCliEspecial(oBrush1,oWnd,Empresa,aMenuItem,24)

         MENUITEM aMenuItem[25] PROMPT "Precios especiales por cliente";
            RESOURCE "LIST16";
            MESSAGE "Listado de precios especiales por cliente";
            ACTION ListEspecialDet(oBrush1,oWnd,Empresa,aMenuItem,25)
         ENDMENU
      SEPARATOR

      MENUITEM aMenuItem[26] PROMPT "Estadísticas";
         RESOURCE "ESTA16";
         MESSAGE "Estadísticas"
         MENU

         MENUITEM aMenuItem[27] PROMPT "Ventas por cliente y fecha";
            RESOURCE "ESTA16";
            MESSAGE "Listado de ventas por cliente y fecha";
            ACTION LisVentasxCli(oBrush1,oWnd,Empresa,aMenuItem,27)

         MENUITEM aMenuItem[28] PROMPT "Ventas por producto y fecha";
            RESOURCE "ESTA16";
            MESSAGE "Listado de ventas por producto y fecha";
            ACTION LisVentasxProd(oBrush1,oWnd,Empresa,aMenuItem,28)

         MENUITEM aMenuItem[29] PROMPT "Ventas por cliente, producto y fecha";
            RESOURCE "ESTA16";
            MESSAGE "Listado de ventas por cliente, producto y fecha";
            ACTION LisVentasxCliyProd(oBrush1,oWnd,Empresa,aMenuItem,29)
         ENDMENU
   ENDMENU

   oMenu:AddMdi()

ENDMENU
 


Luego en otro Array paralelo cargo valores lógicos para cada opción del menú. (.t. o .f.) según corresponda para ese usuario.
Y hago lo siguiente:

Code: Select all  Expand view
FOR Q=1 TO LEN(AutorizaSis[Q])
   IF !AutorizaSis[Q]
      aMenuItem[Q]:Disable()
   ELSE
      aMenuItem[Q]:Enable()
   ENDIF
NEXT


Espero te sirva la idea.
Saludos desde Argentina, Esteban.
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
User avatar
jrestojeda
 
Posts: 593
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: duda de Menú y permisos de usuarios

Postby mgsoft » Wed Feb 17, 2010 8:22 pm

Hola,

Muchas gracias, pero para definir las opciones me gustaría coger el Array existente. El menú tiene muchas opciones, así me ahorro introducir en una Base de Datos todas.

:D
Saludos,

Eduardo
User avatar
mgsoft
 
Posts: 422
Joined: Mon Aug 17, 2009 12:18 pm
Location: España

Re: duda de Menú y permisos de usuarios

Postby jrestojeda » Wed Feb 17, 2010 8:33 pm

Entiendo.
Pero luego los permisos debes guardarlos en algún lado. (supongo que en una tabla)
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
User avatar
jrestojeda
 
Posts: 593
Joined: Wed Jul 04, 2007 3:51 pm
Location: Buenos Aires - Argentina

Re: duda de Menú y permisos de usuarios

Postby mgsoft » Wed Feb 17, 2010 8:42 pm

Sí, pero creo que hay unas funciones para cargar y salvar Arrays a disco!!.
Saludos,

Eduardo
User avatar
mgsoft
 
Posts: 422
Joined: Mon Aug 17, 2009 12:18 pm
Location: España

Re: duda de Menú y permisos de usuarios

Postby jcenteno » Wed Feb 17, 2010 11:21 pm

Hola Mgsoft,

En una dbf tengo los permisos de los usuarios, al iniciar la aplicación los guardo en un arreglo de memoria.
Luego construyo el menú desde otra dbf, en un campo de ésta, guardo el permiso para activar o desactivar cada item.
Iguamente lo hago con la toolbar.

Ejemplo:

FUNCTION BldBar()
*----------------------------------------------------------------*
LOCAL cTbarAlias, i:= 1, nRec, fAction, lRight, cMess, aBmp[3], aRes[3]

IF !AbreDbf( @cTbarAlias, aSysVar(cSysTBar), 1 ) ; oWnd:PostMsg(WM_CLOSE) ; ENDIF

nRec := (cTbarAlias)->( LastRec() )
IF ValType( oApp:oBtnBar ) == "O"
FOR i := 1 To nRec
lRight:= Eval( {|| &(ALLTRIM((cTbarAlias)->FLDCONDI)) } ) // contiene una función que verifica si el usuario tiene el permiso asignado
EnableWindow( oWnd:oBar:aControls[i]:hWnd, lRight )
(cTbarAlias)->(dbSkip())
NEXT i
ELSE
DEFINE BUTTONBAR oApp:oBtnBar SIZE 42,42 ;
3D TOP OF oWnd ;
CURSOR oApp:oCursorHand
FOR i := 1 To nRec
cMess := ALLTRIM((cTbarAlias)->FLDMESSAGE)
aBmp[1] := aGraphs(cTBarPath) + ALLTRIM((cTbarAlias)->FLDBMP1)
aBmp[2] := aGraphs(cTBarPath) + ALLTRIM((cTbarAlias)->FLDBMP2)
aBmp[3] := aGraphs(cTBarPath) + ALLTRIM((cTbarAlias)->FLDBMP3)
aRes[1] := ALLTRIM((cTbarAlias)->FLDRES1)
aRes[2] := ALLTRIM((cTbarAlias)->FLDRES2)
aRes[3] := ALLTRIM((cTbarAlias)->FLDRES3)
IF (cTbarAlias)->FLDSEPARAT
DEFINE BUTTON oButton OF oApp:oBtnBar ;
MESSAGE cMess TOOLTIP cMess ;
GROUP FLAT UPDATE
ELSE
DEFINE BUTTON oButton OF oApp:oBtnBar ;
TOOLTIP cMess MESSAGE cMess ;
FLAT UPDATE
ENDIF
oButton:LoadBitMaps( aRes[1], aRes[2], aBmp[1], aBmp[2], aRes[3], aBmp[3] )
oButton:Refresh()
IF ! EMPTY( fAction := ALLTRIM((cTbarAlias)->FLDACTION) )
oButton:bAction := &(fAction)
ENDIF
lRight:= Eval( {|| &(ALLTRIM((cTbarAlias)->FLDCONDI)) } )
EnableWindow( oButton:hWnd, lRight )
IF ! EMPTY( ALLTRIM((cTbarAlias)->FLDSYS) )
AAdd( oApp:aObjSys, oButton )
ENDIF
(cTbarAlias)->(dbSkip())
NEXT
ENDIF
(cTbarAlias)->(dbCloseArea())
RELEASE cTbarAlias, i, nRec, fAction, lRight, cMess, aBmp, aRes
RETURN oApp:oBtnBar
jcenteno
 
Posts: 23
Joined: Thu Dec 10, 2009 6:07 am


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 31 guests