Progettazione della matrice dei permessi per strumenti interni: ruoli e ambiti
La progettazione della matrice dei permessi ti aiuta a mappare ruoli, ambiti ed eccezioni prima di costruire schermate e API, riducendo rifacimenti ed errori di accesso in seguito.

Che problema risolve una matrice dei permessi
Uno strumento interno è il software che il tuo team usa per gestire il business quotidiano. Pensate ai pannelli admin, cruscotti operativi, console di supporto, schermate di revisione finanziaria e alle piccole app che aiutano le persone ad approvare lavori, correggere dati o rispondere ai clienti.
Questi strumenti toccano dati sensibili e permettono azioni potenti. Un addetto al supporto potrebbe dover visualizzare il profilo di un cliente ma non vedere mai i dettagli completi di pagamento. Un utente finance potrebbe esportare le fatture ma non dovrebbe modificare le impostazioni dell'account. Un responsabile operations potrebbe fare entrambe le cose, ma solo per la sua regione.
I permessi diventano rapidamente complicati perché gli strumenti interni crescono per livelli. Appaiono nuovi ruoli, i ruoli si dividono e le eccezioni temporanee si accumulano: “Permetti a Maria di rimborsare”, “Blocca i contractor dalle note”, “I team lead approvano solo fino a 500$”. Quando le regole vivono solo nella testa delle persone (o in ticket sparsi), interfacce e endpoint API si disallineano e compaiono falle di sicurezza.
La progettazione di una matrice dei permessi risolve questo creando una mappa unica e condivisa di chi può fare cosa, su quali dati e con quali limiti. Diventa la fonte di verità sia per le decisioni di UI (quali schermate, pulsanti e campi mostrare) sia per le decisioni backend (cosa il server consente davvero, anche se qualcuno prova a bypassare l'interfaccia).
Non serve solo agli sviluppatori. Una buona matrice è un documento operativo su cui prodotto, operations e i realizzatori possono concordare insieme. Se costruite con una piattaforma no-code come AppMaster, la matrice rimane essenziale: guida come impostare i ruoli, definire le risorse e mantenere coerenti schermate visive ed endpoint generati.
Una matrice semplice ti aiuta a:
- Esplicitare le regole prima di costruire
- Ridurre il caos delle “casistiche speciali”
- Allineare permessi UI e API
- Revisionare i cambi di accesso senza indovinare
Termini chiave: ruoli, risorse, azioni, ambiti, eccezioni
Una buona progettazione della matrice dei permessi parte da parole condivise. Se il team usa questi termini nello stesso modo, eviterete regole confuse in seguito.
Un ruolo è un gruppo di persone basato sul lavoro che svolgono e che solitamente richiedono lo stesso accesso. Pensate a Support, Finance, Ops o Manager. I ruoli dovrebbero descrivere cosa fa una persona nella maggior parte dei giorni, non la sua anzianità. Una persona può avere più ruoli, ma cercate di mantenerlo raro.
Una risorsa è la cosa che proteggete. Negli strumenti interni le risorse comuni sono clienti, ticket, fatture, report, integrazioni e impostazioni. Nominate le risorse come sostantivi. Questo aiuta quando poi trasformate le regole in schermate ed endpoint API.
Un'azione è ciò che qualcuno può fare su una risorsa. Mantenete i verbi coerenti così la matrice resta leggibile. Azioni tipiche includono:
- view
- create
- edit
- delete
- approve
- export
Un ambito risponde a “quali record?” senza creare altri ruoli. Gli ambiti spesso segnano la differenza tra accesso sicuro e non. Ambiti comuni sono:
- own (record che hai creato o a te assegnati)
- team (il tuo gruppo)
- region (la tua area)
- all (tutto)
Un'eccezione è un'override che rompe le regole normali di ruolo e ambito. Le eccezioni possono essere temporanee (copertura di un turno), specifiche per utente (uno specialista ha un'azione in più) o specifiche per record (un cliente VIP è bloccato). Trattatele come debito controllato: tracciate chi le ha approvate, perché esistono e quando scadono.
Esempio: un agente di Support può “view tickets” con ambito “team”, ma ottiene un'eccezione a breve termine per “export tickets” per una revisione di un incidente. In uno strumento costruito con AppMaster, questo tipo di regola è molto più semplice da mantenere se nominate ruoli, risorse, azioni e ambiti in modo coerente fin dall'inizio.
Decisioni da prendere prima di disegnare la matrice
Iniziate concordando cosa state effettivamente proteggendo. Elencate le aree dello strumento interno come risorse, non come schermate. Una schermata può mostrare “Ordini”, “Rimborsi” e “Clienti” nello stesso posto, ma sono risorse diverse con rischi diversi.
Prima di scrivere un singolo permesso, standardizzate i verbi delle azioni. Piccole differenze di termine creano regole duplicate (edit vs update, remove vs delete, view vs read). Scegliete un set breve e condiviso e mantenetelo su ogni risorsa. Per la maggior parte degli strumenti interni, un set semplice come view, create, update, delete, approve, export è sufficiente.
Gli ambiti sono la decisione successiva e dovrebbero rispecchiare come la vostra azienda pensa già. Troppi ambiti rendono la matrice illeggibile; troppo pochi creano eccezioni continue. Mirate a un set ridotto che si adatti alla struttura organizzativa, ad esempio:
- own (record che hai creato)
- team (record del tuo team)
- location (filiale o regione)
- all (tutto)
- none (nessun accesso)
Serve inoltre una regola chiara per il “no”. Decidete cosa è esplicitamente proibito rispetto a ciò che è implicitamente negato. L'implicito deny (tutto ciò che non è elencato è negato) è più sicuro e semplice. Il divieto esplicito è utile quando avete accesso ampio ma volete bloccare una specifica azione, per esempio “Finance può accedere a tutte le fatture tranne cancellarle”.
Infine, segnate presto le azioni sensibili rispetto alla conformità, prima che si perdano nella griglia. Export, delete, pagamenti, cambio ruoli e accesso a dati personali meritano attenzione extra, logging e spesso un passo di approvazione. Per esempio, potete permettere a un support lead di aggiornare il profilo cliente, ma richiedere l'approvazione finance prima di creare o esportare un pagamento.
Se costruite in AppMaster, queste decisioni si mappano chiaramente su endpoint backend e logiche di Business Process, ma la matrice deve essere chiara prima.
Passo dopo passo: costruire la matrice dei permessi da zero
Partite dal lavoro che le persone fanno, non dalle schermate che prevedete di costruire. Se iniziate dalle schermate, copierete l'interfaccia attuale e perderete le regole reali (come chi può approvare rimborsi o chi può modificare un record cliente dopo che è bloccato).
Un modo semplice per progettare la matrice è trattarla come una mappa che va dai compiti all'accesso, poi convertirla nella vostra app.
Ordine pratico di costruzione
-
Elencate i compiti di business in linguaggio semplice. Esempio: “Eseguire un rimborso”, “Cambiare l'email di un cliente”, “Esportare le fatture del mese scorso”. Teneteli brevi e concreti.
-
Trasformate i compiti in risorse e azioni. Le risorse sono sostantivi (Invoice, Ticket, Customer), le azioni sono verbi (view, create, edit, approve, export). Assegnate un owner per ogni risorsa: una persona che può spiegare i casi limite e dire “sì, è corretto”.
-
Definite i ruoli basati su team stabili. Usate gruppi come Support, Finance, Operations, Team Lead. Evitate titoli che cambiano spesso (Senior, Junior) a meno che non modifichino davvero l'accesso.
-
Compilate la matrice con il minimo accesso che ogni ruolo necessita per completare i compiti. Se il Support deve solo visualizzare le fatture per rispondere a domande, non concedete l'“export” di default. Potete sempre aggiungere accesso dopo, ma rimuoverlo in seguito rompe le abitudini.
-
Aggiungete ambiti solo dove contano. Invece di un singolo permesso “edit”, annotate ambiti come “edit own”, “edit assigned” o “edit all”. Questo mantiene le regole chiare senza creare 50 ruoli.
Documentate le eccezioni in una tabella separata, non come note sparse nella matrice. Ogni eccezione ha bisogno di un campo motivo chiaro (compliance, rischio frode, separazione dei compiti) e di un singolo owner che l'approva.
Quando questo è fatto, strumenti come AppMaster rendono più facile trasformare la matrice in endpoint protetti e schermate admin senza indovinare le regole mentre costruite.
Come strutturare la matrice perché resti usabile
Una matrice dei permessi è utile solo se le persone la leggono rapidamente. Se diventa un enorme muro di celle, i team smettono di usarla e i permessi si allontanano dall'intento originale.
Iniziate dividendo la matrice per dominio. Invece di un foglio unico per tutto, usate una tab per area di business, come Customers, Billing e Content. La maggior parte dei ruoli tocca solo pochi domini: questo mantiene le revisioni veloci e riduce cambi accidentali.
Usate un pattern di naming coerente attraverso le tab. Un formato semplice come Resource.Action.Scope rende ovvio cosa significa ogni permesso e previene duplicati che sembrano diversi ma fanno la stessa cosa. Per esempio, Invoice.Approve.Department si legge come Customer.Edit.Own.
Quando incontrate un caso limite, resistete alla tentazione di creare un nuovo ruolo. Aggiungete una breve nota accanto alla cella che descrive l'eccezione e quando si applica. Esempio: il Support può visualizzare le fatture, ma solo dopo che il cliente verifica l'identità. La nota può anche indicare il passo UI extra necessario, senza cambiare il modello di ruoli.
Segnate le autorizzazioni ad alto rischio in modo che emergano durante le revisioni. Queste sono azioni come rimborsi, approvazioni, export e cancellazioni. Evidenziate le celle e scrivete quale controllo extra è richiesto, come approvazione a due persone o conferma solo da manager.
Per mantenere la matrice gestibile nel tempo, versionatela come un artefatto reale:
- v1, v2, ecc. più data
- owner (una persona responsabile)
- breve sommario delle modifiche
- cosa ha scatenato la modifica (nuovo workflow, audit)
Una volta che la matrice è stabile, è molto più semplice costruire schermate ed endpoint in uno strumento come AppMaster, perché ogni pulsante e azione API si mappa a un nome di permesso chiaro.
Trasformare la matrice in schermate e endpoint
Una matrice dei permessi è utile solo se diventa regole reali in due posti: la tua API e la tua UI. Trattate ogni risorsa nella matrice (come Tickets, Invoices, Users) come un gruppo di endpoint. Allineate le azioni ai verbi della matrice: view, create, edit, approve, export, delete.
Dal lato API, applicate i permessi a ogni richiesta. I controlli UI servono per chiarezza, ma non sono sicurezza. Un pulsante nascosto non ferma una chiamata API diretta.
Un modo semplice per tradurre la matrice in permessi API è nominare i permessi in modo coerente e attaccarli al confine dove avviene l'azione:
- tickets:view, tickets:edit, tickets:export
- invoices:view, invoices:approve, invoices:delete
- users:view, users:invite
Usate poi gli stessi nomi per guidare le regole UI: voci di menu, accesso alle pagine, pulsanti e anche campi. Per esempio, un agente di Support potrebbe vedere la lista Ticket e aprire un ticket, ma il campo “Refund” è in sola lettura a meno che non abbia anche invoices:approve.
Fate attenzione alla differenza tra accesso alla lista e accesso al dettaglio. I team spesso devono “vedere che qualcosa esiste” senza vedere il record completo. Questo significa permettere risultati di lista con colonne limitate, ma bloccare l'apertura del dettaglio a meno che l'utente abbia il permesso di dettaglio (o passi un controllo di ambito come “assegnato a me”). Decidete questo in anticipo per non costruire una schermata lista che perde dati sensibili.
Infine, mappate il logging di audit alle azioni che contano. Export, delete, approve, cambi ruolo e download di dati dovrebbero creare eventi di audit con chi, cosa, quando e il record target. Se costruite in AppMaster, potete riflettere questo nella logica degli endpoint e nei Business Process in modo che la stessa regola inneschi sia l'azione sia la sua voce di audit.
Errori comuni e trappole
Il modo più rapido per rompere una matrice dei permessi è modellare l'interfaccia invece che il business. Una schermata può mostrare diverse cose e la stessa cosa può apparire in più schermate. Se trattate ogni schermata come una risorsa separata, finite per duplicare regole, perdere casi limite e litigare sul naming invece che sull'accesso.
Un'altra trappola comune è la proliferazione dei ruoli. I team continuano ad aggiungere ruoli (Support Level 1, Support Level 2, Support Manager, ecc.) quando un piccolo insieme di ruoli più ambiti chiari farebbe il lavoro. Ambiti come “own team”, “assigned region” o “account che gestisci” spesso spiegano meglio la differenza di un nuovo ruolo.
Ecco alcuni errori che emergono nei tool interni reali:
- Definire solo “view” e “edit”, poi dimenticare azioni come export, bulk edit, refund, impersonate o “change owner”.
- Usare le eccezioni come toppa a lungo termine. Concessioni temporanee (“dare a Sam accesso a Finance per una settimana”) diventano presto permanenti e nascondono un modello di ruoli rotto.
- Nascondere pulsanti nella UI pensando che il sistema sia sicuro. L'API deve comunque rifiutare la richiesta, anche se un utente trova l'endpoint.
- Non decidere cosa succede quando l'ambito di qualcuno cambia, come un trasferimento di team o di regione. I permessi dovrebbero aggiornarsi in modo prevedibile, non scivolare via.
- Trattare “admin” come illimitato senza regole. Anche gli admin spesso necessitano separazioni, per esempio “può gestire utenti” ma “non può approvare pagamenti”.
Le eccezioni meritano cautela speciale. Sono utili per situazioni temporanee, ma dovrebbero scadere o essere riesaminate. Se le eccezioni crescono, è segnale che ruoli o ambiti non sono mappati chiaramente.
Un esempio rapido: in uno strumento support & finance, il Support può visualizzare i profili cliente e creare ticket, ma il Finance può esportare fatture e emettere rimborsi. Se proteggi solo le pagine, un agente di Support potrebbe comunque chiamare direttamente un endpoint di export. Che usiate codice custom o una piattaforma come AppMaster che genera endpoint backend, la regola deve vivere sul server, non solo nell'interfaccia.
Checklist rapida prima di iniziare a costruire
Una matrice dei permessi è utile solo se si trasforma in regole chiare e applicabili. Prima di creare la prima schermata o endpoint, passate questa checklist. Vi aiuta a evitare setup “quasi sicuri” che collassano quando arriva un nuovo ruolo o un caso limite.
Costruisci le regole, poi l'UI
Partite con una mentalità di default deny: tutto ciò che non è esplicitamente permesso è bloccato. È la base più sicura e previene accessi a sorpresa quando aggiungete nuove funzionalità.
Assicuratevi di avere una sola fonte di verità per i permessi. Che viva in un documento, una tabella nel database o nella configurazione no-code, tutti nel team devono sapere dove sono le regole attuali. Se il foglio dice una cosa e l'app un'altra, genererete bug.
Ecco una checklist compatta:
- Default deny è applicato ovunque (pulsanti UI, endpoint API, export, job in background).
- Ogni azione ha una definizione di ambito chiara (own record, team, region, all, o subset nominato).
- Le capacità admin sono separate dalle azioni di business (gestire ruoli non è lo stesso che “approvare un rimborso”).
- Le azioni sensibili richiedono controlli più forti (passaggi di approvazione, logging e idealmente alert su attività insolite).
- Le eccezioni hanno un owner e una data di scadenza, così l’“accesso temporaneo” non diventa permanente.
Dopo ciò, verificate le regole con uno scenario realistico. Per esempio: “Un agente di support può visualizzare un ordine e aggiungere una nota per la sua regione, ma non può modificare prezzi o emettere rimborsi. Finance può emettere rimborsi, ma solo dopo approvazione manageriale, e ogni rimborso è loggato.” Se non riuscite a dirlo in una o due frasi, i vostri ambiti ed eccezioni non sono ancora chiari.
Se usate AppMaster, trattate questi punti come requisiti sia per le schermate sia per la logica di business, non solo per l'UI. I pulsanti possono nascondere azioni, ma solo le regole backend le fanno rispettare davvero.
Scenario esemplificativo: uno strumento interno per support e finance
Immaginate un'azienda di medie dimensioni con uno strumento interno usato da Support e Finance. Lo stesso database contiene Customers, Tickets, Refunds, Payouts e una piccola area Settings (template e integrazioni). Qui un semplice login non basta.
Ruoli di partenza che decidono di usare:
- Support Agent: lavora i ticket in una coda
- Support Lead: supporta più code e approva certe azioni
- Finance: gestisce le attività legate al denaro
- Ops Admin: possiede il controllo accessi e le impostazioni di sistema
Una progettazione pratica comincia scrivendo le azioni per risorsa, poi restringendole con gli ambiti.
Per i Tickets, i Support Agent possono view e update lo status solo per i ticket nella loro coda assegnata. Possono aggiungere note, ma non cambiare il proprietario del ticket. I Support Lead possono fare tutto quello che fa un Support Agent, più riassegnare ticket all'interno della loro regione.
Per i Rimborsi, Finance può creare e approvare rimborsi, ma solo fino a un importo stabilito. Il Support può creare una richiesta di rimborso, ma non approvarla. L'approvazione del rimborso è un'azione separata dalla creazione, quindi resta visibile in matrice e non può essere concessa per errore.
Per Payouts e Settings, lo strumento resta rigido: solo Finance può vedere i payouts e solo Ops Admin può cambiare le Settings. Il Support non vede nemmeno queste schermate, riducendo tentazioni e errori.
Aggiungete un'eccezione: un Support Lead copre un'altra regione per due settimane. Invece di dargli un ruolo ampio come Ops Admin, la matrice può includere un'espansione di ambito temporanea (Support Lead + Regione B, scade in data X). Quell'eccezione è più sicura che copiare permessi tra ruoli.
Se costruite in AppMaster, la stessa matrice guida quali pagine appaiono in UI e cosa gli endpoint permettono lato backend, così nessuno può raggiungere Payouts o Settings indovinando un'API.
Come testare e mantenere i permessi nel tempo
I permessi falliscono solitamente in modi piccoli e noiosi: una schermata dimentica di nascondere un pulsante, un endpoint salta un controllo, una regola di ambito è troppo ampia. Una buona matrice diventa molto più utile quando la trasformate in test ripetibili e in una routine di manutenzione semplice.
Iniziate con un piccolo set di utenti di test. Non servono decine di account. Create un utente per ruolo, più un utente “di confine” per ogni eccezione comune (es. “Support con approvazione rimborso”). Tenete questi account stabili così il team può riusarli ogni sprint.
Poi trasformate la matrice in casi di test. Per ogni regola, scrivete un percorso “consentito” e uno “negato”. Rendete il percorso negato specifico (cosa dovrebbe succedere) così non venga ignorato.
- Ruolo: Support Agent. Azione: Refund. Risultato atteso: negato con messaggio chiaro, nessuna modifica ai dati.
- Ruolo: Finance. Azione: Refund. Risultato atteso: consentito, crea record di rimborso, logga attore e motivo.
- Ruolo: Manager. Azione: View tickets. Ambito: team only. Risultato atteso: può vedere i ticket del team, non può aprire ticket di altri team.
Testate la stessa regola due volte: nell'UI e nell'API. Se l'UI blocca ma l'API permette, qualcuno può bypassare la schermata. Se usate AppMaster, verificate che la logica UI e gli endpoint backend applichino entrambi la regola.
Gli ambiti richiedono dati reali per essere testati. Create record di test che differiscano per ownership, team e regione. Verificate che non si possa “indovinare” un ID di un altro ambito e accedervi.
Infine, decidete cosa loggare per azioni sensibili (rimborsi, export, cambi ruolo). Loggate chi l'ha fatto, cosa è cambiato, quando e da dove. Revisionate i log con cadenza, e aggiungete alert per azioni rare come modifiche di permessi o export massivi.
Prossimi passi: dalla matrice a uno strumento interno funzionante
Trattate la matrice come un piano di costruzione, non come un documento da archiviare. Il modo più rapido per ottenere valore è confermare le basi con chi possiede i dati e i processi.
Iniziate con un workshop breve (30 minuti bastano) con un rappresentante per ruolo più i resource owners (chi è responsabile di clienti, fatture, payouts, ticket, ecc.). Passate ruoli, risorse, azioni e ambiti e segnalate qualsiasi “caso speciale” che sembra un'eccezione. Se un'eccezione sembra comune, potrebbe essere un ambito mancante.
Poi bozzate una matrice v1 e fate una review focalizzata con i resource owners. Restate pratici: “Il Support può vedere le fatture?” “Il Finance può modificare i dati cliente?” Se qualcuno esita, catturate la regola in linguaggio semplice prima. Potete formalizzarla dopo.
Una volta concordata la v1, costruite un dominio end-to-end prima di espandere. Scegliete una fetta sottile che tocchi dati, logica e UI (per esempio: Ticketing o approvazione fatture). Dovreste poter rispondere: chi può vedere, chi può modificare e cosa succede se prova.
Se usate AppMaster, mappate la matrice alle parti del prodotto prima di generare nulla:
- Data Designer: allineate risorse con entità (tabelle) e campi chiave che influenzano gli ambiti (come team_id, region_id)
- Business Processes: applicate le regole dove avvengono le modifiche (create, update, approve, export)
- Regole di visibilità UI: nascondete le azioni che l'utente non può eseguire e mostrate messaggi chiari quando l'accesso è negato
- Endpoint: esponete solo ciò che ogni ruolo necessita e mantenete le operazioni admin separate
Un esempio semplice: costruite un flusso “Richiesta di rimborso” con due ruoli (Support crea, Finance approva). Quando funziona, aggiungete casi limite come “Support può annullare solo entro 30 minuti”.
Provate una piccola app interna in AppMaster per validare ruoli e flussi presto, poi iterate a partire dalla matrice. L'obiettivo è scovare incomprensioni prima di avere 20 schermate e una montagna di correzioni sui permessi.


