📘 Manual de Criação de Menus via Banco de Dados
Este documento descreve como cadastrar novos menus diretamente no banco, bem como os relacionamentos necessários para controle de exibição e permissões.
🗂️ Tabelas Envolvidas
A criação de menus utiliza 3 tabelas:
-
tb_menu→ Estrutura do menu (hierarquia e exibição) -
tb_tipo_login_menu→ Define quais tipos de login podem ver o menu -
tb_permissao_menu→ Define quais permissões liberam o menu
1️⃣ Cadastro na tb_menu
A tabela tb_menu define a estrutura visual e hierárquica do menu.
Existem 3 cenários possíveis:
🔹 1.1 Menu de 1º Nível (SEM filhos)
📌 Menu que abre diretamente uma página.
Condição obrigatória:
pai_list_menu IS NULL
AND link_menu NOT LIKE '#%'
| Campo | Valor |
|---|---|
| status | 1 = Exibe / 0 = Oculta |
| nome_menu | Nome exibido na tela |
| data-localize_menu | Código i18n (opcional) |
| classe_menu | Classe CSS (Font Awesome 3 – ícone) |
| link_menu | URL / rota da página |
| title_menu | Tooltip do menu |
| data-toggle_menu | Vazio |
| id_list_menu | Identificador do <li> (iniciar com mn_) |
| class_list_menu | Vazio |
| ul_id | Vazio |
| ul_class | Vazio |
| pai_list_menu | Vazio |
| ordem_menu | Ordem de exibição (menor → maior) |
✅ Exemplo id_list_menu:
mn_dashboard
🔹 1.2 Menu de 1º Nível (COM filhos)
📌 Menu que não abre página, apenas agrupa submenus.
Condição obrigatória:
pai_list_menu IS NULL
AND link_menu LIKE '#%'
| Campo | Valor |
| status | 1 = Exibe |
| nome_menu | Nome exibido |
| data-localize_menu | Opcional |
| classe_menu | Ícone do menu |
| link_menu | # + palavra-chave (ex: #acessos) |
| title_menu | Tooltip |
| data-toggle_menu | collapse (efeito acordeon) |
| id_list_menu | Deve começar com mn_ |
| class_list_menu | Vazio |
| ul_id | Vazio |
| ul_class | Vazio |
| pai_list_menu | Vazio |
| ordem_menu | Ordem na tela |
🔹 1.3 Menu de 2º Nível (Submenu)
📌 Menu que pertence a outro menu.
| Campo | Valor |
| status | 1 = Exibe |
| nome_menu | Nome exibido |
| data-localize_menu | Opcional |
| classe_menu | Vazio (usar apenas se também for pai de 3º nível) |
| link_menu | URL da página OU #chave se for pai |
| title_menu | Tooltip |
| data-toggle_menu | Vazio (ou collapse se tiver filhos) |
| id_list_menu | Deve começar com mn_ |
| class_list_menu | Vazio |
| ul_id | ID do <ul> pai |
| ul_class | Classe do <ul> pai |
| pai_list_menu | ID do menu pai |
| ordem_menu | Ordem dentro do submenu |
2️⃣ Cadastro na tb_tipo_login_menu
Define QUEM pode ver o menu com base no tipo de login.
🎯 Tipos de Login
| Código | Tipo |
| 0 | Master |
| 1 | Corporativo |
| 2 | Proprietário |
| 3 | Acesso (Condomínio) |
📌 Regra Importante
➡️ Um mesmo menu pode aparecer para vários tipos de login.
➡️ Cada combinação exige um novo registro.
✅ Exemplo
Menu ID 20 visível para:
-
Corporativo (
1) -
Acesso (
3)
Registros necessários:
id_menu = 20 | tipo_login_menu = 1
id_menu = 20 | tipo_login_menu = 3
3️⃣ Cadastro na tb_permissao_menu
Define QUAL PERMISSÃO libera o menu dentro do perfil do usuário.
| Campo | Descrição |
| id_menu | ID do menu |
| permissao_menu | Código da permissão (ex: CO201) |
📌 Regras
✔ Um menu pode ter mais de uma permissão vinculada
✔ Permissões normalmente terminam com 01
✔ Cada permissão = 1 novo registro
✅ Exemplo
Menu ID 20 liberado por duas permissões:
id_menu = 20 | permissao_menu = CO201
id_menu = 20 | permissao_menu = AG301
✅ Fluxo Correto de Criação (Resumo)
1️⃣ Criar o menu na tb_menu
2️⃣ Vincular os tipos de login na tb_tipo_login_menu
3️⃣ Vincular as permissões na tb_permissao_menu
⚠️ Erros Comuns
❌ Esquecer mn_ no id_list_menu
❌ Não cadastrar tipo de login → menu não aparece
❌ Não cadastrar permissão → menu invisível mesmo existindo
❌ Usar link normal em menu pai (deve começar com #)
❌ Não preencher pai_list_menu em submenu
📌 Boas Práticas
✔ Use nomes de link_menu padronizados (#cadastros, #relatorios)
✔ Mantenha ordem_menu espaçada (10,20,30…) para facilitar inserções futuras
✔ Sempre valide se o <ul> pai existe antes de vincular submenu
✔ Teste com usuário real após cadastro
Fim do Manual