Tutorials
Rechtensysteem
Een goede manier hoe je de rechten bepaalt van de bezoekers/leden
Pagina 1
Uitleg
Een tijdje geleden postte Mitch http://www.phphulp.nl/forum/showtopic.php?id=1444&cat=1 een vraag hoe hij het beste rechten systeem kon maken. Arend gaf een mooie oplossing hoe het kon gedaan. En hij beloofde een tutorial over te schrijven en die is er nooit gekomen. Daarnaast zaten er wat phrase errors in en die heb natuurlijk er even uit gehaald
Na een half jaar ben ik begonnen met het maken van mijn nieuwe clansite en met mijn oude versie was ik niet echt tevreden over mijn huidige rechten systeem.
Ik zal eerst even uitleggen hoe ik mijn huidige rechten systeem was.
Hiervoor had ik 3 'rangen', namelijk:
Bezoeker.
Clanlid.
Admin.
Bezoekers hadden geen inlognaam nodig en konden anoniem posten ook onder een verkeerde naam van iemand anders. Daarnaast konden ze geen berichten wijzigen dat het gevolg was dat er veel gespamed werd. En dat was/is alleen maar irritant.
Clanleden en Admins hadden andere rechten en konden beveiligde pagina's bezoeken. Maar alleen de admins konden de berichten aan passen. Dit kan dus beter.
Na een half jaar ben ik begonnen met het maken van mijn nieuwe clansite en met mijn oude versie was ik niet echt tevreden over mijn huidige rechten systeem.
Ik zal eerst even uitleggen hoe ik mijn huidige rechten systeem was.
Hiervoor had ik 3 'rangen', namelijk:
Bezoeker.
Clanlid.
Admin.
Bezoekers hadden geen inlognaam nodig en konden anoniem posten ook onder een verkeerde naam van iemand anders. Daarnaast konden ze geen berichten wijzigen dat het gevolg was dat er veel gespamed werd. En dat was/is alleen maar irritant.
Clanleden en Admins hadden andere rechten en konden beveiligde pagina's bezoeken. Maar alleen de admins konden de berichten aan passen. Dit kan dus beter.
Pagina 2
Rechten berekenen
Maar hoe reken je terug want je kunt hem zo wel in de database opslaan maar je zit nog steeds met het probleem hoe reken je terug.
Dit kan ook met een functie :)
<?php
function checkpermissies ($pgetal) {
$flags = array();
for ($i = 5 /*aantal velden*/;$i >= 0;$i--) {
if($pgetal - pow(2,$i) >= 0)
{
$flags[$i] = 1;
$pgetal = $pgetal - pow(2,$i);
}
}
return $flags;
}
//roep hem aan:
Print_r(checkpermissies('5'));
?>
Dit zal
$rechten['0'] = 1;
$rechten['1'] = 0;
$rechten['2'] = 1;
$rechten['3'] = 0;
$rechten['4'] = 0;
Je zult dus merken dat dit een goede manier is om je rechten systeem makkelijk en simpel te houden en het belangrijkste is dat je per onderdeel de rechten kan instellen en dit met een simpel systeem.
Dit kan ook met een functie :)
<?php
function checkpermissies ($pgetal) {
$flags = array();
for ($i = 5 /*aantal velden*/;$i >= 0;$i--) {
if($pgetal - pow(2,$i) >= 0)
{
$flags[$i] = 1;
$pgetal = $pgetal - pow(2,$i);
}
}
return $flags;
}
//roep hem aan:
Print_r(checkpermissies('5'));
?>
Dit zal
$rechten['0'] = 1;
$rechten['1'] = 0;
$rechten['2'] = 1;
$rechten['3'] = 0;
$rechten['4'] = 0;
Je zult dus merken dat dit een goede manier is om je rechten systeem makkelijk en simpel te houden en het belangrijkste is dat je per onderdeel de rechten kan instellen en dit met een simpel systeem.
Pagina 3
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.
<?php
$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:
<?php
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.
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.
<?php
$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:
<?php
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.
Reacties
0