Implandação da customização das permissões dos usuarios e das notificaçoes

This commit is contained in:
2026-08-26 17:24:25 -03:00
parent 808c2c7545
commit 5bb5d74e22
71 changed files with 2487 additions and 269 deletions

View File

@@ -34,14 +34,17 @@
<%# Navegação %>
<nav class="px-3 py-4 space-y-1 flex-1 overflow-y-auto">
<%# Dashboard — admin/gerente/operador/externo (todos menos motorista) %>
<% unless current_user.motorista? %>
<%# Cada item pergunta por PERMISSÃO, não por papel: o menu é o espelho do
perfil que o ADM montou (Permissao::TODAS). Item sem permissão SOME — não
fica desabilitado, para não anunciar o que a pessoa não pode fazer. %>
<% if current_user.pode?('dashboard.ver') %>
<%= nav_link_to 'Dashboard', dashboard_path, icon: :dashboard %>
<% end %>
<% if current_user.pode?('dashboard.operacoes') %>
<%= nav_link_to 'Operações', operacoes_dashboard_path, icon: :operacoes %>
<% end %>
<%# Consolidações — só quem pode consolidar (exclui o externo) %>
<% if current_user.pode_consolidar? %>
<% if current_user.pode?('consolidacao.ver') %>
<%= nav_link_to 'Consolidações', consolidacoes_path, icon: :consolidacoes %>
<%= nav_link_to 'Arquivadas', arquivadas_consolidacoes_path, icon: :arquivadas %>
<% end %>
@@ -51,29 +54,55 @@
<%= nav_link_to 'Meu Painel', motorista_dashboard_path, icon: :painel %>
<% end %>
<%# Admin/Gerente — Configurações %>
<% if current_user.pode_ver_config? %>
<%# Administração — a seção inteira some quando nenhum item dela está liberado. %>
<% itens_admin = %w[admin.usuarios admin.perfis admin.configuracoes admin.auditoria
admin.planilha_simpli_route admin.edicao_lancamento] %>
<% if itens_admin.any? { |chave| current_user.pode?(chave) } %>
<div class="pt-4 mt-4 border-t border-[#2a2a2a]">
<p class="px-3 text-xs text-gray-600 uppercase tracking-wider mb-2">Administração</p>
<%= nav_link_to 'Usuários', admin_usuarios_path, icon: :usuarios %>
<%= nav_link_to 'Configurações', admin_configuracoes_path, icon: :configuracoes %>
<%= nav_link_to 'Auditoria', admin_auditoria_logs_path, icon: :auditoria %>
<%= nav_link_to 'Planilha SimpliRoute', admin_planilha_simpli_route_path, icon: :planilha %>
<% if current_user.admin? %>
<% if current_user.pode?('admin.usuarios') %>
<%= nav_link_to 'Usuários', admin_usuarios_path, icon: :usuarios %>
<% end %>
<% if current_user.pode?('admin.perfis') %>
<%= nav_link_to 'Perfis de acesso', admin_perfis_path, icon: :chave %>
<% end %>
<% if current_user.pode?('admin.configuracoes') %>
<%= nav_link_to 'Configurações', admin_configuracoes_path, icon: :configuracoes %>
<% end %>
<% if current_user.pode?('admin.auditoria') %>
<%= nav_link_to 'Auditoria', admin_auditoria_logs_path, icon: :auditoria %>
<% end %>
<% if current_user.pode?('admin.planilha_simpli_route') %>
<%= nav_link_to 'Planilha SimpliRoute', admin_planilha_simpli_route_path, icon: :planilha %>
<% end %>
<% if current_user.pode?('admin.edicao_lancamento') %>
<%= nav_link_to 'Editar Lançamento', admin_edicao_lancamento_path, icon: :editar_lancamento %>
<% end %>
</div>
<%# Notificações: quem recebe (grupos/contatos) é admin+gerente; ligar o
WhatsApp e criar eventos manda mensagem em nome da empresa — só ADM.
Mesmo recorte das policies. %>
<% end %>
<%# Notificações — cada item com sua chave: ver contatos é uma coisa; ligar o
WhatsApp e disparar mensagem em nome da empresa é outra. %>
<% itens_notif = %w[notificacao.contatos notificacao.envios notificacao.eventos
notificacao.variaveis notificacao.whatsapp_sessao] %>
<% if itens_notif.any? { |chave| current_user.pode?(chave) } %>
<div class="pt-4 mt-4 border-t border-[#2a2a2a]">
<p class="px-3 text-xs text-gray-600 uppercase tracking-wider mb-2">Notificações</p>
<%= nav_link_to 'Contatos', admin_contatos_path, icon: :usuarios %>
<%= nav_link_to 'Grupos', admin_grupos_path, icon: :tag %>
<%= nav_link_to 'Envios', admin_envios_path, icon: :historico %>
<% if current_user.admin? %>
<% if current_user.pode?('notificacao.contatos') %>
<%= nav_link_to 'Contatos', admin_contatos_path, icon: :usuarios %>
<%= nav_link_to 'Grupos', admin_grupos_path, icon: :tag %>
<% end %>
<% if current_user.pode?('notificacao.envios') %>
<%= nav_link_to 'Envios', admin_envios_path, icon: :historico %>
<% end %>
<% if current_user.pode?('notificacao.eventos') %>
<%= nav_link_to 'Eventos', admin_eventos_path, icon: :diario %>
<% end %>
<% if current_user.pode?('notificacao.variaveis') %>
<%= nav_link_to 'Variáveis', admin_variaveis_path, icon: :tag %>
<% end %>
<% if current_user.pode?('notificacao.whatsapp_sessao') %>
<%= nav_link_to 'WhatsApp', admin_whatsapp_sessao_path, icon: :telefone %>
<% end %>
</div>