Leggi questo:
http://php.html.it/articoli/leggi/90...nti-con-php/1/

e questo per capire come immagazzinare dei permessi in un numero intero con le operazioni bit a bit:
http://php.html.it/articoli/leggi/92...e-il-database/

In realtà quest'ultimo articolo è un po' approssimativo e dà informazioni errate.
Dice in particolare che un campo tinyint permette di immagazzinare fino a 255 permessi:

...Dall'articolo di Ermanno Ancona:
Come si può notare assegnando tali valori impostiamo ad 1 uno solo dei bit della sequenza, ovvero impostiamo il famoso flag. Per quanto riguarda la tabella di database, riferendoci a MySQL, potremo utilizzare un campo tinyint unsigned per memorizzare le preferenze degli utenti. Questo ci garantisce un range di valori da 0 a 255. Se prevedete un numero maggiore di opzioni utilizzate un campo intero più grande.
Dal momento che gni permesso corrisponde ad una potenza di 2, il numero massimo memorizzato nel campo permessi dell’utente sarà 2 elevato al numero di permessi; pertanto con un campo tinyint si possono gestire al massimo 8 permessi (cioè 28).

Siccome PHP sui S.O. più diffusi gestisce interi relativi (INT SIGNED) fino ad un massimo di 31 bit, che corrispondono al numero intero base dieci 2147483648, se si considerano solo gli interi positivi (INT UNSIGNED) si guadagna un bit in più, arrivando al numero massimo 2^32 = 4294967296.


A conferma di questo, lo script PHP per la gestione degli utenti scritto da Gabriele Farina che ho linkato per primo usa esattamente quel sistema, e a conferma di quanto ho scritto non può gestire più di 32 permessi.

Ciao