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

Bitmanipulation og MySQL-hentning i PHP

Har du overvejet at gemme dine tilladelser som et heltal, med hver tilladelse en binær værdi (dvs. 1,2,4,8,16), og du lægger alle deres tilladelser sammen. Du kan derefter kontrollere, om de har en given tilladelse ved at bruge &-operatøren

Sådan:

if ($accessLevel & $userPermissions) 

Det giver dig et meget mere anvendeligt system end at gemme et binært tal

Som anmodet i kommentarer, lidt mere information.

Du ville konfigurere din brugertabel til at have et heltalsfelt til at gemme dine tilladelser. Hvert af dine tilladelsesniveauer ville have et binært multiplum (kender ikke det korrekte udtryk her), der svarer til værdien af ​​en binær bit. For eksempel:

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

Og så videre, så mange som nødvendigt. For at oprette et brugertilladelsesniveau, ELLER du værdierne sammen. Lad os antage, at ovenstående niveauer er gemt i en klasse som statiske værdier, du ville oprette det sådan:

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

Hvilket giver dig en bruger, der kan læse og oprette, men ikke redigere eller slette.

For at kontrollere, om en bruger har tilladelse til at udføre en handling, bruger du OG:

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

Dette giver dig et enkelt databasefelt, der kan udvides, som du realistisk har brug for, og let at bruge kontroller og ændringer. Du vil måske også overveje at gemme tilladelsesniveauer i en anden tabel osv., afhængigt af hvilket tilpasningsniveau du muligvis har brug for.



  1. URL-omskrivning med .htaccess lav dublerede mysql-indgange

  2. php imap - få brødtekst og lav almindelig tekst

  3. IN-klausul bruger ikke indeks

  4. Problemer med at kontrollere, om en tabel findes eller ej i db