La logica dell'array che hai citato è una soluzione linguistica imperativa, non proprio appropriata per l'archiviazione su un database.
I database relazionali utilizzano la logica dell'insieme, che è in qualche modo simile ai concetti di matrice ma non è la stessa. Pensi su insiemi / tabelle che sono come array estensibili.
Il design del database più comune per il tuo problema (con molte varianti diverse) includerebbe 3 tabelle, prodotto di normalizzazione dei requisiti dei dati:
a) Utenti, campi di base come id_user e login_user più eventuali campi richiesti (ad es. first_name, last_name)
Dati di esempio:
id_user login_user
1 admin
2 db2791
3 bruno
b) Autorizzazioni, con campi di base come id_permission e name_permission
Dati di esempio:
id_permission name_permission
1 Crea Repo
2 Commit in Repo
c) Utenti - Tabella delle relazioni delle autorizzazioni, con campi base le chiavi esterne id_user e id_permission; quindi contrassegna se disponi di livelli diversi per le autorizzazioni, ad es. can_read, can_write, che potrebbero invece essere autorizzazioni indipendenti
Dati di esempio:
id_user id_permission
1 1
1 2
2 2
La mancanza di dati nella relazione implica l'assenza di autorizzazione. Potresti voler aggiungere un flag grant / deny per consentire la rimozione esplicita del permesso.
Un altro schema comune che estende questo, è quello di aggiungere una tabella Risorse (o Securables), cambiando la relazione con l'utente - permesso - risorsa