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

@@ -0,0 +1,46 @@
# app/models/variavel_personalizada.rb
#
# Variável criada pelo ADM, com valor fixo, usável em qualquer mensagem.
class VariavelPersonalizada < ApplicationRecord
# Nome da tabela fixado: o Inflector pt-BR não resolve variavel → variaveis.
self.table_name = 'variaveis_personalizadas'
# Mesmo formato que o renderizador aceita em {{...}}: letras minúsculas,
# números e _ . Sem isso, o ADM cadastraria "Telefone Suporte" e a variável
# nunca seria substituída — falha muda dentro da mensagem enviada.
FORMATO_CHAVE = /\A[a-z][a-z0-9_]*\z/
before_validation :normalizar
validates :chave, presence: true, uniqueness: { case_sensitive: false },
format: { with: FORMATO_CHAVE,
message: 'use apenas letras minúsculas, números e _ (ex.: telefone_suporte)' }
validates :valor, presence: true
validate :nao_colidir_com_variavel_do_sistema
scope :ativas, -> { where(ativo: true) }
scope :ordenadas, -> { order(:chave) }
def marcador = "{{#{chave}}}"
private
def normalizar
self.chave = chave.to_s.strip.downcase.tr(' ', '_')
self.valor = valor.to_s.strip
end
# Deixar o ADM criar {{valor}} ou {{motorista}} faria a variável dele
# sobrescrever (ou ser sobrescrita por) a do sistema, dependendo da ordem —
# exatamente o tipo de bug que não aparece no preview e aparece no envio.
def nao_colidir_com_variavel_do_sistema
return if chave.blank?
reservadas = Notificacao::CatalogoVariaveis::SISTEMA.keys +
Notificacao::CatalogoVariaveis::CONTEXTO.keys +
Notificacao::CatalogoVariaveis::DADOS.keys
return unless reservadas.include?(chave)
errors.add(:chave, "já existe no sistema — escolha outro nome (ex.: #{chave}_empresa)")
end
end