Abaixo apresentamos uma rotina que habilita os itens de menu que o usuário possui acesso. Assumimos que o programador esteja seguindo padrőes de desenvolvimento. A variável Usuario indica o nome do usuário e Acessos a lista dos Sistemas e Itens do Menu que o usuário tem direito.

 

Exemplo para Acessos.

1. TODOS indica que o usuário tem acesso a todos os sistemas e todos os programas.

2. FINANCEIRO indica acesso a financeiro apenas.

3. PRG_FINGERENCIAL,PRG_FINSINTETICO indica acesso ao relatórios Gerencial e Sintético apenas.

 

O caso mais sinistro: TODOS,FINANCEIRO,TOP_FINRELATORIOS,PRG_FINGERENCIAL indica que o usuário possui acesso irrestrito a TODOS os sistemas exceto o FINANCEIRO, onde acessa apenas o menu de relatórios e todos os relatórios nele contidos, mas năo o Gerencial.

 

 

RotinasGenericas.pas


(...)

 

procedure HabilitaMenu(Frm_Main:TForm);

 

   procedure HabilitaItem(MenuItem:TMenuItem;Habilita:Boolean);

   var

      c : integer;

   begin

      MenuItem.Enabled := Pos(UpperCase(MenuItem.Name)+',',Acessos) > 0;

      If Habilita Then MenuItem.Enabled := Not MenuItem.Enabled;

      If MenuItem.Count > 0 Then

         For c := 0 To MenuItem.Count - 1 Do

            HabilitaItem(MenuItem.Items[c],MenuItem.Enabled);

   end;

 

var

   c : integer;

   vbAcessoGeral, vbAcessoSistema:Boolean;

begin

   {Altera o usuário da conexăo}

   For c:= 0 To Frm_Main.ComponentCount - 1 Do

      If UpperCase(Frm_Main.Components[c].Name) = 'DB_MAIN' Then

         With Frm_Main.Components[c] As TIBDataBase Do

         Begin

            Close;

            DBParamByDPB[isc_dpb_user_name] := Usuario;

         End;

   {Habilita Itens do Menu}

   Acessos := Format(',%s,',[Acessos]);

   vbAcessoGeral := Pos(',TODOS,',Acessos) > 0;

   vbAcessoSistema := Pos(','+GetNomeSistema+',',Acessos) > 0;

   If vbAcessoGeral Then vbAcessoSistema := Not vbAcessoSistema;

   For c:= 0 To Frm_Main.Menu.Items.Count - 1 Do

      HabilitaItem(Frm_Main.Menu.Items[c],vbAcessoSistema);

   {Habilita os níveis superiores}

   For c:= 0 To Frm_Main.ComponentCount - 1 Do

      If Frm_Main.Components[c].ClassName = 'TMenuItem' Then

         With Frm_Main.Components[c] As TMenuItem Do

            If Count > 0 Then

               Enabled := True;

end;

 

(...)