✨ feat(ci): nessun modulo puo' dichiarare ruoli in auth.ruoli
- nuovo step in quality-gates.yml: cerca INSERT INTO auth.ruoli nei file .sql di migrations, seeds, sql e database/migrations, e fallisce spiegando cosa fare invece — dichiarare un gruppo d'area con i propri permessi, scegliendo il livello fra i tredici di piattaforma - il contratto esisteva dal seed 13 di node-user-profiling e prevedeva questo controllo, che non era mai stato scritto: nove microfrontend lo hanno disatteso, 21 ruoli creati e 27 su 35 senza omonimo PostgreSQL. Un ruolo cosi' nel claim role del JWT e' un SET ROLE che non riesce, e l'utenza di collaudo del timesheet ne era la prova - il boundary dopo `ruoli` tiene fuori auth.ruolipermessi; le righe di commento sono ignorate perche' spesso spiegano proprio questa regola - una-tantum e rollback sono escluse: raccolgono delta generati e script di ritorno, fotografie di stati passati che riscrivere falserebbe - nuovo input owns-auth-roles (default false): solo node-user-profiling, che possiede lo schema, lo mette a true. Unica deroga, ed e' esplicita - verificato su tutti i 30 frontend con migrazioni e sui backend principali: nessuno fallisce dopo la ripulitura dei nove repo Fixes #7 @1h
This commit is contained in:
@@ -13,6 +13,13 @@ on:
|
||||
npm-version:
|
||||
type: string
|
||||
default: ''
|
||||
owns-auth-roles:
|
||||
description: >-
|
||||
Solo per il repository proprietario di auth.ruoli (node-user-profiling):
|
||||
gli consente di dichiarare ruoli nelle proprie migrazioni. Ogni altro
|
||||
repo deve lasciarlo a false, e il gate qui sotto glielo impedisce.
|
||||
type: boolean
|
||||
default: false
|
||||
|
||||
jobs:
|
||||
quality-gates:
|
||||
@@ -46,6 +53,59 @@ jobs:
|
||||
echo "@pzeta:registry=https://gitea.pzetatouch.it/api/packages/PZeta_Touch/npm/" >> ~/.npmrc
|
||||
echo "//gitea.pzetatouch.it/api/packages/PZeta_Touch/npm/:_authToken=${{ secrets.NPM_TOKEN }}" >> ~/.npmrc
|
||||
|
||||
- name: Nessun ruolo dichiarato fuori da node-user-profiling
|
||||
if: ${{ !inputs.owns-auth-roles }}
|
||||
shell: bash
|
||||
run: |
|
||||
# `auth.ruoli` appartiene a node-user-profiling e il suo contratto (seed
|
||||
# 13, esteso dalla migrazione 19) vieta agli altri moduli di crearne.
|
||||
# Non e' una formalita': il claim `role` del JWT e' il primo ruolo
|
||||
# applicativo dell'utente e PostgREST ci fa un SET ROLE, ma i ruoli
|
||||
# PostgreSQL esistono solo per i tredici livelli di piattaforma. Un
|
||||
# ruolo per-modulo in quel claim e' una sessione che non parte.
|
||||
# Nove microfrontend lo avevano disatteso: 21 ruoli, 27 su 35 senza
|
||||
# omonimo PostgreSQL. Questo controllo esiste perche' non si ripeta.
|
||||
set -uo pipefail
|
||||
dirs=""
|
||||
for d in migrations seeds sql database/migrations; do
|
||||
[ -d "$d" ] && dirs="$dirs $d"
|
||||
done
|
||||
if [ -z "$dirs" ]; then
|
||||
echo "Nessuna cartella di migrazioni: controllo non applicabile."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Il boundary dopo `ruoli` evita che auth.ruolipermessi finisca fra i
|
||||
# match; il filtro sulle righe che iniziano per -- lascia passare i
|
||||
# commenti, che spiegano spesso proprio questa regola.
|
||||
# Fuori dal controllo le cartelle che non alimentano il catalogo delle
|
||||
# migrazioni: `una-tantum` raccoglie i delta generati per riallineare a
|
||||
# mano un tenant, `rollback` gli script di ritorno. Sono strumenti
|
||||
# operativi, spesso fotografie di uno stato passato, e riscriverli
|
||||
# significherebbe falsare la storia che documentano.
|
||||
hits=$(grep -rniE --include='*.sql' \
|
||||
--exclude-dir=una-tantum --exclude-dir=rollback \
|
||||
'insert[[:space:]]+into[[:space:]]+auth\.ruoli([[:space:]]|\(|$)' \
|
||||
$dirs 2>/dev/null \
|
||||
| awk -F: '{ riga=$0; sub(/^[^:]*:[^:]*:/, "", riga); gsub(/^[[:space:]]+/, "", riga); if (riga !~ /^--/) print }' || true)
|
||||
|
||||
if [ -n "$hits" ]; then
|
||||
echo "::error::Questo repository dichiara ruoli in auth.ruoli, che appartiene a node-user-profiling."
|
||||
echo ""
|
||||
echo "$hits"
|
||||
echo ""
|
||||
echo "Cosa fare invece: dichiarare un GRUPPO d'area con i permessi del modulo."
|
||||
echo " INSERT INTO auth.gruppi (nome, nomecompleto, descrizione, tipogruppo, idruololivello)"
|
||||
echo " ... poi INSERT INTO auth.gruppipermessi per collegarvi i propri permessi."
|
||||
echo ""
|
||||
echo "Il livello che accompagna il gruppo si sceglie fra i tredici di piattaforma"
|
||||
echo "(manager, contabile, auditor, cfo, dipendente, viewer, operatore, cliente):"
|
||||
echo "sono gli unici ad avere un ruolo PostgreSQL, senza il quale il SET ROLE fallisce."
|
||||
echo "Esempio: vue-timesheet/migrations/12_gruppi_area.sql"
|
||||
exit 1
|
||||
fi
|
||||
echo "Nessun INSERT INTO auth.ruoli: contratto rispettato."
|
||||
|
||||
- name: Check outdated packages
|
||||
run: npm outdated || true
|
||||
|
||||
|
||||
Reference in New Issue
Block a user