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,31 @@
# Perfil de acesso: o conjunto de permissões que o ADM monta na tela e atribui a
# um usuário.
#
# Antes, quem-vê-o-quê era o papel fixo em `users.role` e um punhado de `if
# admin? || gerente?` espalhado pelas policies: tirar as Configurações de UM
# gerente exigia editar código e fazer deploy.
#
# `permissoes` é jsonb (lista de chaves de Permissao::TODAS) e não tabela filha
# de propósito: é um conjunto pequeno, sempre lido junto com o perfil, e nunca
# consultado ao contrário ("quem tem tal permissão?" se responde em memória). A
# validação de quais chaves existem fica no model — o catálogo é código, muda com
# deploy, e o banco não pode travar um perfil salvo com uma chave que saiu.
class CreatePerfisAcesso < ActiveRecord::Migration[7.1]
def change
create_table :perfis_acesso do |t|
t.string :nome, null: false
t.string :descricao
t.jsonb :permissoes, null: false, default: []
# sistema: nasce com o app (Administrador, Gerente, ...). Editável e
# desativável, mas não apagável — mesma regra de EventoNotificacao#apagavel?
t.boolean :sistema, null: false, default: false
t.boolean :ativo, null: false, default: true
t.timestamps
end
# Nome é o que identifica o perfil na tela; duplicar só gera erro humano.
add_index :perfis_acesso, 'LOWER(nome)', unique: true,
name: 'index_perfis_acesso_nome_unico'
end
end