Salta ai contenuti

Aggiornamento

Cinque passaggi, a partire dal più recente. Inizia da quello immediatamente superiore alla versione che stai utilizzando e procedi verso il basso — oppure, se provieni dalla versione 0.12, inizia dal fondo e procedi verso l’alto.

Sei sulla Leggi Cosa comporta per te
0.18 – 0.20 0.18 → 0.21 context.client.data non compila più all’interno di una callback di collection — esegui le query tramite context.data — e selectedEntities lascia il posto a una selezione che può rappresentare righe che nessuno ha caricato. Le versioni 0.19 e 0.20 non dichiarano breaking change, quindi questo è un singolo passaggio a partire da 0.18.
0.17 0.17 → 0.18 Undici breaking change, per la maggior parte errori di compilazione anziché modifiche silenziose del comportamento. rebase.data scompare a runtime, i range dei peer si restringono ai caret, e il requisito minimo di Node sale a 22.22.0.
0.14 – 0.16 0.14 → 0.17 I pacchetti admin vengono rinominati, le risorse sono dichiarate anziché configurate, e un bundle compilato in precedenza non si avvierà su un runtime attuale. La 0.15 e la 0.16 non interrompono nulla, quindi questo è un singolo passaggio a partire da 0.14.
0.13 0.13 → 0.14 Tutte le chiavi di rete sono in camelCase, e l’accesso anonimo è opt-in.
0.12 0.12 → 0.13 Il passaggio più ampio, e l’unico che modifica chi può leggere i tuoi dati. Rimuove lo schema auth, rinomina i pacchetti, cambia il significato di id, abbandona CJS, migra il pannello admin a react-router 8 e corregge tre modalità in cui poteva essere concesso l’accesso senza che fosse richiesto.

Le sezioni di ogni pagina sono ordinate secondo la sequenza in cui devi applicarle, e ciascuna indica il sintomo che altrimenti ti ritroveresti a dover diagnosticare partendo dal presupposto sbagliato.

Quindi, a prescindere dal passaggio effettuato:

[ ] grep for authenticated() and (auth|rebase).uid() IS NOT NULL in config/collections/
[ ] decide the intent of each rule; rewrite the ones that meant "public"
[ ] replace not(authenticated()) with serverContext()
[ ] if realtime.requireAuth was true with an AuthAdapter, treat the socket as
having been open — verify RLS on every subscribable collection (section 2)
[ ] SELECT ... FROM pg_policies — record the qual of every policy BEFORE
[ ] update package names and imports
[ ] grep for rebase.data — it is now rebase.dataAsAdmin (section 8)
[ ] grep for the other ten removed deprecated exports (section 8)
[ ] drop react-router-dom; import RouterProvider from "react-router/dom"
[ ] check node >= 22.22.0 and react >= 19.2.7 (react-router 8 requires both)
[ ] move defaultSecurityRules into config/collections/index.ts
[ ] grep for .userId
[ ] grep for row.id on tables not keyed on id
[ ] run db push
[ ] run rebase doctor --policies — expect no Insecure or Orphaned entries
[ ] SELECT ... FROM pg_policies again — confirm every intended change landed
[ ] exercise the app signed OUT, in a private window — watch the websocket too
--- 0.13 → 0.14 (part 2) ---
[ ] re-run rebase generate-sdk, then build — the compiler finds row.author_id
[ ] grep for snake_case where/orderBy keys; a stale one is a 400, not a warning
[ ] grep for raw fetch consumers reading row.<something>_id — these read
undefined and raise nothing
[ ] if the project was introspected, re-run rebase schema introspect
[ ] decide anonymous sign-in: set auth.allowAnonymous: true, or confirm you
never used it (grep for signInAnonymously)
[ ] drop @rebasepro/client-postgres from package.json
--- 0.14 → 0.17 (part 3) ---
[ ] rename @rebasepro/admin → @rebasepro/cms and admin-types → cms-types,
and RebaseAdmin → RebaseCMS
[ ] move dataSources / storageSources out of the backend config into
rebase.json and config/, then `rebase build` — an old bundle will not boot
[ ] grep collections for admin.titleProperty; it is refused at boot now
[ ] grep crons for ctx.client and for `userId` as an identity key
[ ] rename --legacy to --workspace wherever build/start is scripted
[ ] if you implement EmailService yourself, `send` must return a result

rebase doctor --policies è quello da integrare nella CI: restituisce un exit code diverso da zero in presenza di una policy che include ancora la tautologia permissiva, o di una sostituita da un push precedente. Le letture di pg_policies prima e dopo meritano comunque quel minuto di attenzione — mostrano le espressioni stesse, l’unico modo per individuare una policy fail-open scritta con una sintassi non riconosciuta dal detector. Né i pacchetti né il sistema di tipi te lo segnaleranno: la modifica risiede nel database, e db push è l’unica operazione che la applica.

  • Changelog — le note di rilascio riassunte da ciascuna di queste sezioni
  • Compatibilità — i sei contratti, e quali possono essere interrotti da una versione
  • Comandi CLIrebase doctor e i comandi eseguiti dalle checklist