Boa tarde.
Eu fiz da seguinte forma:
1 - Coloquei todos os itens do menu com visible false.
2 - Faço um select no banco de dados para verificar quais os menus que o usuário tem acesso.
3 - Chamo a procedure abaixo, que é recursiva (pois deve-se percorrer os itens e subitens do menu), e recebe como parâmetro um objeto da classe TUniMenuItem.
HabilitarMenu(MainMenu.Items);
procedure TFrmMain.HabilitarMenu(AMenu: TUniMenuItem);
var
i: integer;
begin
for i := 0 to AMenu.Count - 1 do
begin
if QryAux.Locate('descricao', AMenu.Caption, [loCaseInsensitive]) then
begin
AMenu.Visible := true;
end;
HabilitarMenu(AMenu);
end;
end;
Atenciosamente,
Possidônio.