Controle de Acesso por Usuário
Galera bom dia, eu queria realizar o controle de acesso as telas por usuário, eu não queria usar nenhum componente externo apenas os da VLC mesmo. A minha ideia era cadastrar as telas no BD, e a permissão S / N do usuário, porém quando eu faço um for p/ percorrer todos os itens do MainMenu ele não pega os itens do SubMenu, para isso acontecer eu sempre tenho que ficar criando for em baixo de for... tem alguma maneira de fazer ele sempre percorrer todos os itens independente de quantos SubMenu exista? Ou então um outro jeito de criar o controle de usuários? Estou usando Delphi + FB
Paulo
Curtidas 0
Respostas
Emerson Nascimento
26/04/2021
veja se o item de menu tem subitens e os leia, em cascata.
GOSTEI 0
Paulo
26/04/2021
veja se o item de menu tem subitens e os leia, em cascata.
E como validar essa condição? Não encontrei nenhuma condição para validar se o item tem submenu ou não, como fazer isso? O problema de fazer isso é que cada vez que eu acrescentar um novo submenu eu teria que fazer um novo for né?
GOSTEI 0
Emerson Nascimento
26/04/2021
publique aqui o código que você usa para pegar o item do menu
GOSTEI 0
Paulo
26/04/2021
publique aqui o código que você usa para pegar o item do menu
for i:=0 to MainMenu1.Items.Count-1 do begin
MainMenu1.Items[i].Name
end;
Estou fazendo assim...
GOSTEI 0
Emerson Nascimento
26/04/2021
Estou fazendo assim...
não. não está.
esse código que você postou não faz nada.
de qualquer forma, seguem duas formas de fazer (o princípio é o mesmo, só muda a apresentação):
var
arrayItems: array of string;
i: integer;
mensagem: string;
function iif(condition: boolean; iftrue: variant; iffalse: variant): variant;
begin
if condition then
result := iftrue
else
result := iffalse;
end;
procedure PegaItems(Item: TMenuItem);
var
j: integer;
begin
SetLength(arrayItems, Length(arrayItems)+1);
arrayItems[High(arrayItems)] := Item.Caption;
if Item.Count > 0 then
for j := 0 to Item.Count-1 do
PegaItems(Item.Items[j]);
end;
procedure PegaItems2(Pai: string; Item: TMenuItem);
var
j: integer;
begin
SetLength(arrayItems, Length(arrayItems)+1);
arrayItems[High(arrayItems)] := iif(Pai>'',Pai+'>','')+Item.Caption;
if Item.Count > 0 then
for j := 0 to Item.Count-1 do
PegaItems2(iif(Pai>'',Pai+'>','')+Item.Caption,Item.Items[j]);
end;
begin
for i := 0 to MainMenu1.Items.Count-1 do
PegaItems(MainMenu1.Items[i]);
mensagem := '';
for i := Low(arrayItems) to High(arrayItems) do
mensagem := mensagem + arrayItems[i] + ', ' + #13
MessageDlg(mensagem, mtWarning, [mbOk], 0);
SetLength(arrayItems, 0);
for i := 0 to MainMenu1.Items.Count-1 do
PegaItems2('', MainMenu1.Items[i]);
mensagem := '';
for i := Low(arrayItems) to High(arrayItems) do
mensagem := mensagem + arrayItems[i] + ', ' + #13
MessageDlg(mensagem, mtWarning, [mbOk], 0);
end;
GOSTEI 0
Paulo
26/04/2021
Estou fazendo assim...
não. não está.
esse código que você postou não faz nada.
de qualquer forma, seguem duas formas de fazer (o princípio é o mesmo, só muda a apresentação):
var
arrayItems: array of string;
i: integer;
mensagem: string;
function iif(condition: boolean; iftrue: variant; iffalse: variant): variant;
begin
if condition then
result := iftrue
else
result := iffalse;
end;
procedure PegaItems(Item: TMenuItem);
var
j: integer;
begin
SetLength(arrayItems, Length(arrayItems)+1);
arrayItems[High(arrayItems)] := Item.Caption;
if Item.Count > 0 then
for j := 0 to Item.Count-1 do
PegaItems(Item.Items[j]);
end;
procedure PegaItems2(Pai: string; Item: TMenuItem);
var
j: integer;
begin
SetLength(arrayItems, Length(arrayItems)+1);
arrayItems[High(arrayItems)] := iif(Pai>'',Pai+'>','')+Item.Caption;
if Item.Count > 0 then
for j := 0 to Item.Count-1 do
PegaItems2(iif(Pai>'',Pai+'>','')+Item.Caption,Item.Items[j]);
end;
begin
for i := 0 to MainMenu1.Items.Count-1 do
PegaItems(MainMenu1.Items[i]);
mensagem := '';
for i := Low(arrayItems) to High(arrayItems) do
mensagem := mensagem + arrayItems[i] + ', ' + #13
MessageDlg(mensagem, mtWarning, [mbOk], 0);
SetLength(arrayItems, 0);
for i := 0 to MainMenu1.Items.Count-1 do
PegaItems2('', MainMenu1.Items[i]);
mensagem := '';
for i := Low(arrayItems) to High(arrayItems) do
mensagem := mensagem + arrayItems[i] + ', ' + #13
MessageDlg(mensagem, mtWarning, [mbOk], 0);
end;
Era exatamente isso que eu precisava, vou adaptar o código para meu uso. Muito Obrigado.
GOSTEI 0