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