Che cosa sono i permessi di classe (CLP)?

Aggiornato: ottobre 2026

Un permesso di classe è una regola sullo schema di una classe che controlla quali utenti o ruoli possono eseguire ciascuna operazione su quella classe. È la barriera più esterna della sicurezza dello strato dei dati: prima di qualsiasi controllo riga per riga, è la classe stessa a decidere se chi chiama possa fare find, create, update o delete qui – una regola, tutta la tabella, verificata per prima.

Punti chiave

DomandaRisposta
Che cos’èRegole di accesso per operazione sulla classe (tabella) stessa
vs. ACLIl CLP presidia la classe; le ACL presidiano ogni riga – la richiesta deve superare entrambe
Le operazioniFind, get, count, create, update, delete, add field – ciascuna impostata a parte
I valori predefiniti d’oroRichiedere l’autenticazione, bloccare add field, non distribuire mai la master key
Il cugino SQLGRANT/REVOKE su tabelle e schemi – stessa idea, altra sintassi

La barriera della classe, dichiarata e percepita

Un CLP è configurazione dello schema – qui nella forma del payload REST che blocca una classe Config in lettura pubblica e scrittura riservata al server:

PUT /schemas/Config
{
  "classLevelPermissions": {
    "find":   { "*": true },              // chiunque può interrogare
    "get":    { "*": true },
    "create": {},                         // nessuno dal lato client
    "update": { "role:admin": true },     // solo gli admin
    "delete": {},
    "addField": {}                        // schema congelato
  }
}

Quello che i client sperimentano è la barriera che fa il suo lavoro – le letture passano, le scritture muoiono al confine della classe prima che un solo dato venga toccato:

// JavaScript / Node.js — Back4app JS SDK
// The class gate in action: Config is read-only for clients (CLP),
// so reads succeed and writes never reach the data
const config = await new Parse.Query('Config').first(); // ✓ public read

const c = new Parse.Object('Config');
c.set('flag', true);
try {
  await c.save(); // ✗ CLP blocks client writes to this class entirely
} catch (e) {
  console.log(e.code); // 119: operation forbidden by class-level permissions
}

Come i permessi di classe e le ACL lavorano insieme

Come si combinano i permessi di classe e le ACLOgni richiesta supera prima la barriera dei permessi di classe per la propria operazione; l'ACL per oggetto viene consultata solo se la classe la consente, e ciascuna delle due barriere può negare la richiesta.

no

sì

no

sì

Richiesta:
modificare l'oggetto X nella classe C

Barriera di classe (CLP):
chi chiama può
modificare la classe C?

Negato — 119

Barriera di oggetto (ACL):
chi chiama può
scrivere l'oggetto X?

Negato — oggetto nascosto

Consentito

Ogni richiesta supera prima la barriera dei permessi di classe per la propria operazione; l'ACL per oggetto viene consultata solo se la classe la consente, e ciascuna delle due barriere può negare la richiesta.

La scala della granularità: CLP vs. ACL vs. pointer permissions vs. campi protetti

MeccanismoPortataDichiarato doveVerificatoCompito tipico
Permesso di classeTutta la classe, per operazioneSchemaPer primo”I client non scrivono mai su Config”
Pointer permissionPer oggetto, tramite una regola di schemaSchema (agganciata a un campo)Per secondo”Solo l’owner tocca le proprie righe”
ACLPer oggettoSu ciascuna riga, come datoPer secondo”Questa nota: solo il suo autore”
Campi protettiPer colonnaSchemaAlla lettura”Nascondere email agli altri utenti”

L’idioma di progettazione che ne deriva: le linee generali sullo schema, la grana fine sulle righe. Le classi la cui regola di accesso è uniforme (configurazioni, cataloghi, log) hanno bisogno solo della barriera della classe; le classi con dati per utente aggiungono ACL o pointer permissions al di sotto.

La stessa barriera in altri motori

-- PostgreSQL: i privilegi di tabella sono CLP con un altro nome
GRANT SELECT ON films TO PUBLIC;
GRANT INSERT, UPDATE ON films TO role_editor;
REVOKE ALL ON launch_codes FROM PUBLIC;

I database documentali lo riproducono con ruoli limitati ad azioni a livello di collezione – un ruolo con find e insert su una sola collezione. Il concetto è universale; ciò che cambia è l’ergonomia: i GRANT SQL e i documenti di ruolo si amministrano nel codice, mentre le piattaforme BaaS espongono la stessa matrice come interruttori nella dashboard.

Impostazioni consigliate per tipo di contenuto

Tipo di contenutoFind/GetCreateUpdate/DeleteAdd field
Contenuti pubblici (catalogo, post)PubblicoRuoli/serverRuoli/serverDisattivato
Dati di proprietà dell’utente (note, ordini)Autenticato + ACLAutenticatoDelimitato da ACLDisattivato
Configurazioni e flagPubblico o autenticatoNessuno (solo server)Ruolo adminDisattivato
Log e analiticheNessuno (solo server)Autenticato (sola scrittura)NessunoDisattivato
Dati riservati agli adminRuolo adminRuolo adminRuolo adminDisattivato

Quella tabella è la checklist di cui ha davvero bisogno la maggior parte dei lanci – vale la pena notare la costante nell’ultima colonna e la sua regola sorella: creazione di classi dal client disattivata in produzione, così che lo schema cambi solo di proposito.

Casi d’uso tipici

  • Congelare gli schemi di produzione. Add field disattivato dappertutto; le classi smettono di comparire e di mutare per effetto del traffico dei client.
  • Dati di riferimento in sola lettura. Cataloghi e impostazioni leggibili pubblicamente, scrivibili solo dal codice server – lo schema Config qui sopra.
  • Caselle in sola scrittura. Classi di feedback e telemetria in cui i client possono creare ma non leggere mai – la barriera inversa che il codice dello strato applicativo dimentica spesso.
  • Superfici di amministrazione a livelli di ruolo. Update e delete riservati a un ruolo admin, mentre l’app legge liberamente.
  • Difesa dal dump classico. La famigerata riga di comando – un curl con un app ID che interroga una classe User aperta – muore alla barriera find appena la classe richiede l’autenticazione.

Barriera della classe o codice server? Matrice decisionale

Applicare con i CLP (+ ACL) quando…Passare dal codice server quando…
La regola è “chi può fare che cosa, dove”La regola richiede logica di business (“solo prima che l’ordine venga spedito”)
È uniforme per classe o per proprietarioRiguarda più oggetti o più classi
Serve che valga su ogni percorso, compresi i client nuoviServe un unico punto di passaggio verificato per un flusso sensibile
Per la revisione il dichiarativo batte l’imperativoValidazione, arricchimento o effetti collaterali viaggiano insieme
L’interruttore nella dashboard è tutta la specificaLa specifica è un paragrafo di condizioni

I due approcci si compongono: lo schema irrobustito per le classi davvero sensibili blocca interamente i CLP ed espone funzioni lato server come unica porta d’ingresso – la barriera della classe garantisce che nessuno aggiri il punto di passaggio.

Limiti e trade-off

  • La granularità di classe è grossolana per definizione. Tutto ciò che è per riga appartiene alle ACL e alle pointer permissions; tutto ciò che è condizionale appartiene alla validazione lato server – i CLP presidiano, non ragionano.
  • I valori predefiniti sono permissivi per lo sviluppo. Le classi nuove nascono aperte perché i prototipi corrano; la passata di prelancio che applica la tabella qui sopra è una disciplina, non un automatismo.
  • La master key ignora tutto. Ogni barriera di questo articolo cade dove quella chiave circola – ed è per questo che vive solo lato server, usata operazione per operazione, mai distribuita.
  • La superficie di applicazione deve essere completa. Le sottoscrizioni in tempo reale e gli endpoint speciali hanno avuto storicamente dei buchi di applicazione – conviene tenere la piattaforma aggiornata e provare le barriere da un client reale, non solo dalla dashboard.
  • Anche gli interruttori vanno rivisti. La sicurezza dichiarativa è sicurezza verificabile solo se qualcuno la verifica – la matrice delle impostazioni appartiene alla checklist di lancio, non alla memoria collettiva.

I CLP su Back4app

Back4app è una piattaforma open-source di Backend as a Service (BaaS) che combina database gestito, API REST e GraphQL generate automaticamente, autenticazione, archiviazione di file e funzioni serverless con Cloud Code. I permessi di classe sono la sua superficie di sicurezza dello schema resa visiva: ogni classe nella dashboard porta la matrice delle operazioni come caselle da spuntare – pubblico, autenticazione richiesta, per ruolo – più le pointer permissions e i campi protetti, applicati lato server a ogni richiesta attraverso gli SDK, REST e GraphQL allo stesso modo. Al di sotto stanno le ACL per oggetto; al di sopra, i trigger di Cloud Code per le regole che hanno bisogno di logica. Le linee guida di sicurezza ripercorrono l’intera passata di prelancio – la matrice delle impostazioni di questo articolo, applicata clic per clic.

Domande frequenti

Che cosa sono i permessi di classe?

Regole allegate allo schema di una classe (tabella/collezione) che controllano quali utenti o ruoli possono eseguire ciascuna operazione – find, get, count, create, update, delete, add field – su qualsiasi oggetto di quella classe. Sono la barriera di accesso più grossolana e la prima a essere verificata: se la regola di classe nega un'operazione, nessun permesso per oggetto viene mai consultato.

Qual è la differenza tra CLP e ACL?

Portata e ordine. Un CLP risponde a "chi può toccare questa classe, in assoluto" – una regola per l'intera tabella. Un'ACL risponde a "chi può toccare questa riga precisa" – un dato portato da ciascun oggetto. Una richiesta deve superare entrambe le barriere: prima quella della classe, poi quella dell'oggetto, e ognuna può negare. Linee generali a livello di classe, grana fine a livello di oggetto.

Che cos'è requiresAuthentication?

L'impostazione intermedia fra pubblico e ruoli elencati: riserva un'operazione a qualsiasi utente connesso con una sessione valida, senza nominare utenti o ruoli precisi. È il valore predefinito giusto per quasi tutti i dati applicativi – le richieste anonime vengono rifiutate, mentre ogni utente autenticato supera la barriera della classe e passa ai controlli di ACL per oggetto.

Che cosa sono le pointer permissions?

Regole a livello di classe agganciate a un campo Pointer verso un utente sull'oggetto – per esempio "solo l'utente nel campo owner può leggere o scrivere". Agiscono come un'ACL virtuale: l'applicazione è per oggetto, ma la regola si dichiara una volta sola sullo schema invece di essere memorizzata su ogni riga. Si intersecano con le ACL vere; entrambe devono consentire l'azione.

Che cosa sono i campi protetti (protected fields)?

Regole a livello di campo sovrapposte alla barriera della classe: alcune colonne – un indirizzo e-mail, un punteggio interno – restano nascoste ad alcuni richiedenti mentre il resto dell'oggetto rimane leggibile. Trasformano la scala dei permessi in tre pioli su un unico schema: operazioni sull'intera classe, accesso per oggetto e visibilità per campo.

Qual è l'equivalente SQL dei permessi di classe?

I privilegi di tabella e di schema: GRANT SELECT, INSERT, UPDATE, DELETE ON una tabella a un ruolo, REVOKE per revocarli, più i diritti USAGE e CREATE a livello di schema. Il concetto si trasporta uno a uno – un GRANT a livello di tabella è un permesso di classe con un'altra sintassi – e i database documentali lo riproducono con ruoli limitati ad azioni a livello di collezione.

I client devono poter aggiungere campi o creare classi in produzione?

No – è il passo di irrobustimento su cui esiste consenso. La flessibilità dello schema è una comodità di sviluppo; in produzione conviene disattivare il permesso add field su ogni classe e spegnere del tutto la creazione di classi dal client, congelando lo schema nei confronti dei client. Le modifiche allo schema passano allora dalla dashboard o dal codice server, dove hanno il loro posto.

I permessi di classe bastano a mettere in sicurezza un'app?

Sono il primo strato, non l'intera difesa. Lo stack standard: i CLP filtrano le operazioni per classe, le ACL o le pointer permissions delimitano le righe, i campi protetti nascondono le colonne sensibili e i trigger lato server validano le scritture. E una regola sopra tutte: la master key – che aggira ogni barriera – non viene mai distribuita nel codice client.

Termini correlati

Confronta con

Fonti di approfondimento

Pronto a costruire il tuo backend?

Avvia il tuo progetto su Back4app in pochi minuti: database, autenticazione, API e Cloud Code inclusi. Nessuna carta di credito richiesta.

Scritto e revisionato da Back4app Engineering, Back4app Engineering · Pubblicato il 2026-10-09