Een manier van een rechten systeem

We gaan uit van een website die meerdere pagina's heeft en je wilt gebruikers verschillende rechten toewijzen. Iedere pagina heeft ook weer zijn eigen functionaliteiten:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
Nieuws
  - Toevoegen
  - Wijzigen
  - Verwijderen
  - Goedkeuren
Games
  - Toevoegen
  - Wijzigen
  - Verwijderen
  - Goedkeuren


Hoe zou jij dit oplossen? Je kunt dit namelijk op verschillende manieren doen. Hier een voorbeeld zoals het zou werken, maar niet optimaal is.

Om gebruikers te koppelen aan functionaliteiten maken we een tabel aan die functioneert tussen gebruiker en functionaliteiten met de kolommen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE `user_rights` (
`tid` INT( 11 ) NOT NULL ,
`news_add` ENUM( '0', '1' ) NOT NULL ,
`news_edit` ENUM( '0', '1' ) NOT NULL ,
`news_delete` ENUM( '0', '1' ) NOT NULL ,
`news_approve` ENUM( '0', '1' ) NOT NULL ,
`games_add` ENUM( '0', '1' ) NOT NULL ,
`games_edit` ENUM( '0', '1' ) NOT NULL ,
`games_delete` ENUM( '0', '1' ) NOT NULL ,
`games_approve` ENUM( '0', '1' ) NOT NULL ,
PRIMARY KEY ( `tid` )
)


De `tid` (to ID) verwijst naar de gebruiker en de rest spreekt voor zich.

Stel Klaas mag:
  • Nieuws toevoegen
  • Nieuws wijzigen
  • Games wijzigen
  • Games verwijderen


Dan zou een rij in deze kolom er als volgt uit zien:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
tid       news_add       news_edit       news_delete       news_approve       games_add       games_edit       games_delete       games_approve
25               1               1               0               0               0               1               1               0


Stel dat Klaas nu op 'wijzigen' klikt. Dan zou dat er in PHP zo uit moeten zien:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
// connect to database
include('includes/database.inc.php');

// retrieve the rights
$rights_sql = "SELECT * FROM user_rights WHERE tid = " . mysql_real_escape_string($_SESSION['user_id']);
if (!$rights_res = mysql_query($rights_sql))
  trigger_error('Fout in query: ' . mysql_error());
else
{
  if (mysql_num_rows($rights_res) >= 1)
    $rights = mysql_fetch_assoc();
}


// the different pages
if ($_GET['show'] == 'nieuws')
{

  // add
  if ($_GET['page'] == 'add' && $rights['news_add'] == 1)
     echo 'Add news';
  elseif ($_GET['page'] == 'edit' && $rights['news_edit'] == 1)
     echo 'Edit news';
  elseif ($_GET['page'] == 'delete' && $rights['news_delete'] == 1)
     echo 'Delete news';
  elseif ($_GET['page'] == 'approve' && $rights['news_approve'] == 1)
     echo 'Approve news';
  else
     echo 'Show overview news items';
}

elseif ($_GET['show'] == 'games')
{

  if ($_GET['page'] == 'add' && $rights['games_add'] == 1)
     echo 'Add a game';
  elseif ($_GET['page'] == 'edit' && $rights['games_edit'] == 1)
     echo 'Edit a game';
  elseif ($_GET['page'] == 'delete' && $rights['games_delete'] == 1)
     echo 'Delete';
  elseif ($_GET['page'] == 'approve' && $rights['games_approve'] == 1)
     echo 'Approve a game';
  else
     echo 'Show overview with games';
}
?>


Dit is een erg simpele manier om het te doen. Eéntje die ik ook vaak tegen kom en werkt, maar niet optimaal is. Stel nu dat een gebruiker die games mag verwijderen, ze ook automatisch mag toevoegen, wijzigen en goed mag keuren? Dan krijg je in PHP iets als:

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

  if ($_GET['page'] == 'add' && ($rights['games_add'] == 1 || $rights['games_delete'] == 1))
    echo 'Add a game';
  elseif ($_GET['page'] == 'edit' && ($rights['games_edit'] == 1 || $rights['games_delete'] == 1))
    echo 'Edit a game';
  // etc
?>


Stel nu dat gebruikers die mogen wijzigen, ook mogen toevoegen, dan kun je erg lange if statements krijgen. Dit is niet het geval als je de bitwise methode gebruikt. Zie de volgende pagina voor uitleg.

« 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.