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;
(...)