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)
PHP script in nieuw venster Selecteer het PHP script
1
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;
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
if ($_GET['show'] == 'games')
{

   // if (website.php?show=games&page=add && 16 & 16)
   if ($_GET['page'] == 'add' && $_SESSION['myrights'] & $rights['games_add'])
      echo 'Add a game';
   else
      echo 'Wrong rights..';
}

?>


Stel nu dat Klaas een game wil verwijderen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
if ($_GET['show'] == 'games')
{

   // if (website.php?show=games&page=delete && 16 & 64)
   if ($_GET['page'] == 'delete' && $_SESSION['myrights'] & $rights['games_delete'])
      echo 'Delete a game';
   else
      echo 'Wrong rights..'; // this will get triggered
}
?>


Of dat hij een nieuws artikel wil toevoegen:


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
if ($_GET['show'] == 'news')
{

   // if (website.php?show=news&page=add && 16 & 1)
   if ($_GET['page'] == 'add' && $_SESSION['myrights'] & $rights['news_add'])
      echo 'Add news';
   else
      echo 'Wrong rights..'; // this will get triggered
}
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
if ($_GET['show'] == 'games')
{

   // if (website.php?show=games&page=delete && 195 & 64)
   if ($_GET['page'] == 'delete' && $_SESSION['myrights'] & $rights['games_delete'])
      echo 'Delete it!';
   else
      echo 'Wrong rights..';
}

?>


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.

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Inleiding
  2. Een manier van een rechten systeem
  3. Bitwise rechten systeem

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.