sql >> Database >  >> RDS >> Mysql

Bitmanipulatie en MySQL ophalen in PHP

Heb je overwogen om je permissies op te slaan als een geheel getal, met elke permissie een binaire waarde (dwz 1,2,4,8,16), en je telt al hun rechten bij elkaar op. U kunt dan controleren of ze toestemming hebben met de operator &

Vind ik leuk:

if ($accessLevel & $userPermissions) 

Dat geeft je een veel bruikbaarder systeem dan het opslaan van een binair getal

Zoals gevraagd in opmerkingen, wat meer informatie.

U zou uw gebruikerstabel zo instellen dat er een integerveld is om uw machtigingen op te slaan. Elk van uw machtigingsniveaus zou een binair veelvoud hebben (weet hier niet de juiste term) die overeenkomt met de waarde van een binair bit. Bijvoorbeeld:

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

En zo verder, zoveel als nodig is. Om een ​​gebruikersmachtigingsniveau te creëren, OR de waarden samen. Laten we aannemen dat de bovenstaande niveaus in een klasse zijn opgeslagen als statische waarden, je zou het als volgt maken:

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

Dat geeft je een gebruiker die kan lezen en creëren, maar niet kan bewerken of verwijderen.

Om te controleren of een gebruiker toestemming heeft om een ​​actie uit te voeren, gebruik je AND:

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

Dit geeft u één eenvoudig databaseveld, dat zo uitbreidbaar is als u realistisch gezien nodig heeft, en eenvoudig te gebruiken controles en wijzigingen. U kunt ook overwegen om machtigingsniveaus op te slaan in een andere tabel, enz., afhankelijk van het aanpassingsniveau dat u mogelijk nodig heeft.



  1. SELECTEER verschillende waarden voor meerdere rijen met dezelfde ID

  2. Een API aanroepen vanuit de opgeslagen procedure van SQL Server

  3. MySQL - Vervang karakter in kolommen

  4. Database-ontwerp voor het maken van aangepaste formulieren (en opslag van resultaten)