Mysql
 sql >> Database >  >> RDS >> Mysql

Manipolazione di bit e recupero di MySQL in PHP

Hai considerato di archiviare le tue autorizzazioni come un numero intero, con ciascuna autorizzazione un valore binario (ad esempio, 1,2,4,8,16) e sommare tutte le loro autorizzazioni. Puoi quindi verificare se hanno un'autorizzazione data utilizzando l'operatore &

Così:

if ($accessLevel & $userPermissions) 

Questo ti dà un sistema molto più utilizzabile rispetto alla memorizzazione di un numero binario

Come richiesto nei commenti, qualche informazione in più.

Dovresti impostare la tabella degli utenti in modo che abbia un campo intero per memorizzare le tue autorizzazioni. Ciascuno dei tuoi livelli di autorizzazione avrebbe un multiplo binario (non conosco il termine corretto qui) che corrisponde al valore di un bit binario. Ad esempio:

Read - 1
Edit - 2
Create - 4
Delete - 8

E così via, quanti ne servono. Per creare un livello di autorizzazione degli utenti, OPPURE i valori insieme. Supponiamo che i livelli precedenti siano archiviati in una classe come valori statici, la creeresti in questo modo:

$newUser->Permissions = Permissions::Read | Permissions::Create;

Ciò ti offre un utente che può leggere e creare, ma non modificare o eliminare.

Per verificare se un utente dispone dell'autorizzazione per eseguire un'azione, utilizza AND:

if ($newUser->Permissions & Permissions::Read) {
    echo 'You can do this!';
}  else {
    echo 'You can't this!';
}

Questo ti offre un campo database semplice, estensibile quanto ti serve realisticamente e controlli e modifiche semplici da usare. Potresti anche prendere in considerazione l'archiviazione dei livelli di autorizzazione in un'altra tabella, ecc., a seconda del livello di personalizzazione di cui potresti aver bisogno.