Bitwise rechten systeem
We gaan weer uit van de zelfde situatie. Een website met nieuws en games waarbij je per pagina de functionaliteiten; toevoegen, wijzigen, verwijderen en goedkeuren hebt.
Door het gebruik van bitwise kun je functionaliteiten opslaan in bits. Een systeem zoals we op de vorige pagina bespraken, zou je als volgt definiëren in je config file:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
include('includes/database.inc.php');
// set permissions
$rights['news_add'] = 1;
$rights['news_edit'] = 2;
$rights['news_delete'] = 4;
$rights['news_approve'] = 8;
$rights['games_add'] = 16;
$rights['games_edit'] = 32;
$rights['games_delete'] = 64;
$rights['games_approve'] = 128;
?>
include('includes/database.inc.php');
// set permissions
$rights['news_add'] = 1;
$rights['news_edit'] = 2;
$rights['news_delete'] = 4;
$rights['news_approve'] = 8;
$rights['games_add'] = 16;
$rights['games_edit'] = 32;
$rights['games_delete'] = 64;
$rights['games_approve'] = 128;
?>
We hebben nu de rechten in bitwise gezet.
Stel dat Klaas nu de rechten heeft om een game toe te voegen. In dit geval is Klaas zijn recht: 16. Dit zetten we voor het gemak in $_SESSION['myrights']. In PHP controleer je dit op de volgende manier:
Code (php)
Stel nu dat Klaas een game wil verwijderen:
Code (php)
Of dat hij een nieuws artikel wil toevoegen:
Code (php)
Een ander voorbeeld. Stel dat Klaas nu nieuws mag toevoegen en wijzigen. Ook mag hij games verwijderen en goedkeuren. Dan tel je de getallen van de rechten op, in dit geval:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$rights['news_add'] = 1;
$rights['news_edit'] = 2;
$rights['games_delete'] = 64;
$rights['games_approve'] = 128;
?>
$rights['news_add'] = 1;
$rights['news_edit'] = 2;
$rights['games_delete'] = 64;
$rights['games_approve'] = 128;
?>
Je telt dus: 1 + 2 + 64 + 128 = 195.
Klaas heeft in zijn gebruikers tabel een kolom genaamd 'myrights'. Dat is in dit geval dus; 195. We zetten dit voor het gemak weer even in $_SESSION['myrights'].
Stel nu dat er een actie uitgevoerd moet worden voor het verwijderen van een game. In PHP ziet dit er dan als volgt uit:
Code (php)
Wat doen we hier nu boven? Ten eerste kijk je of de 'delete' pagina wordt aangeroepen. Zo ja, dan ga je kijken of de rechten van Klaas, in dit voorbeeld 195 een bit zijn van 64. Dat is in dit geval dus juist.
Dit principe kun je ook koppelen aan groepen. Stel je hebt een groep gamers die alles mogen doen op de 'games' pagina (toevoegen, wijzigen, verwijderen, goedkeuren). Dan zou je een database tabel moeten aanmaken voor de groepen met daarin de integer: 240 (optelling van: games_add + games_edit + games_delete + games_approve). Vervolgens koppel je de gebruiker aan de ID van de groep en klaar is Klaas in dit geval. :)
Voor je hele rechten systeem heb je dus maar 1 integer per gebruiker nodig om te bepalen wat hij of zij wel en niet mag. Hoop dat je er wat van hebt kunnen opsteken en dat ik het goed heb uitgelegd. Vragen graag per reactie.