Flag berekenen
Dit is systeem is gebaseerd op de rechten systeem van Linux. Elke bestand of map heeft rechten en aan dat systeem kan linux zien of een programma dat bestand kan lezen, wijzigen of uitvoeren. Respectievelijk: 20, 21,22. Reken tel dit bij elkaar op: 20 = 1, 21 = 2 en 22 = 4. 1 + 2 + 4 = 7.
Een 7 betekend dat de gebruiker, Schrijf, Lees, uitvoer rechten heeft. En 3 betekend dat de gebruiker uitvoer en schrijf rechten heeft. Maar geen lees Rechten.
Je raad dus al dat dit een perfect systeem is.
Met dit voorbeeld ga ik uit van een niet bestaande website. Dit om beter duidelijk te maken wat dit systeem kan.
Deze website kunnen mensen het volgende:
Forum berichten plaatsen/editen/verwijderen (Eigen posts).
Forum berichten van andere mensen editen en wijzigen (Modje functie).
Nieuws berichten plaatsen.
Nieuwsbrief verzenden.
Leden beheren.
Elke 'recht' krijgt nu nummer beginnend bij de 0 en loopt steeds met 1 op.
2
3
4
5
6
7
$rechten['0'] == "Leden";
$rechten['1'] == "Moderator";
$rechten['2'] == "Nieuws";
$rechten['3'] == "Nieuwsbrief";
$rechten['4'] == "Leden Beheren";
?>
Doordat je met de machten van 2 werkt is er nooit een overlap of een uit komst mogelijk waar 2 of meerdere manier zijn. Maar hoe bereken je het.
Heel simpel met je eigen maakte functie:
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
function calc_flag($array)
{
$num = 0;
for($i = 0;$i < 5 /*aantal velden*/;$i++)
{
if($array[$i] == 1)
{
$num = pow(2,$i) + $num;
}
}
return $num;
}
//voorbeeld
$rechten = array();
$rechten['0'] = 1;
$rechten['1'] = 0;
$rechten['2'] = 1;
$rechten['3'] = 0;
$rechten['4'] = 0;
echo calc_flag($rechten);
// 5
$rechten = array();
$rechten['0'] = 1;
$rechten['1'] = 1;
$rechten['2'] = 1;
$rechten['3'] = 1;
$rechten['4'] = 1;
echo calc_flag($rechten);
//31
?>
Dit sla je op in de database en kun je later weer op vragen. Ik neem aan dat iedereen wel weet hoe het moet.