Reacties op het script Menu met levels
|
Gepost op: 08 mei 2006 - 09:50 |
|
|
|
Moderator
|
Ziet er goed uit, maar wellicht dat e.e.a. eenvoudiger kan als je het als volgt aanpakt:
Stel dat je voor de levels van verschillende gebruikers een getal gebruikt, dat een macht van 2 is:
1 = Lid
2 = Medewerker
4 = Admin
8 = Super-Admin
16 = Co-Beheerder
32 = Beheerder
(en level 0 zou je speciaal kunnen maken - bijv. dat dat ook aangeeft dat een link voor iedereen zichtbaar is)
Dan kun je bij elke link in één keer aangeven wie deze te zien krijgt, door de som van de levels te nemen van de gebruikers die deze link mogen zien. Omdat de levels machten van 2 zijn, zal deze som niet "overlappen".
Stel dat je een menu-item hebt, dat alleen door co-beheerders en beheerders bekeken mag worden, dan pak je hiervoor 'view-level' 48 (16+32).
Je controleert of iemand een menu-item mag bekijken met de "binary comparator" & - Deze binaire operator is zeg maar een && op bit-niveau.
Voorbeeld:
<?php
if($view_level & $jouw_level)
{
// menu-item zichtbaar
// ...
} else
{
// menu-item niet zichtbaar
// ...
}
?>
<?php if($view_level & $jouw_level) { // menu-item zichtbaar // ... } else { // menu-item niet zichtbaar // ... } ?>
Ook kunnen de if-statements korter. Alles van de vorm:
if(<statement dat true of false oplevert>)
{
$some_var = true; // als het statement true opleverde
} else
{
$some_var = false; // als het statement false opleverde
}
if(<statement dat true of false oplevert>) { $some_var = true; // als het statement true opleverde } else { $some_var = false; // als het statement false opleverde }
kan herschreven worden naar:
$some_var = <statement dat true of false oplevert>;
$some_var = <statement dat true of false oplevert>;
|
|
|
|
Gepost op: 08 mei 2006 - 12:10 |
|
|
|
Crew algemeen
|
Nu staan er 2 versies, de normale en de bitwise versie.
In allebei zitten nu die verkorte statements. |
|
|
|
Gepost op: 08 mei 2006 - 14:32 |
|
|
|
Crew algemeen
|
Misschien zou je de verschillende levels in constanten kunnen verpakken. Dit is iets eenvoudiger als je bijvoorbeeld de getallen veranderd, of meer ranks toevoegt. |
|
|
|
Gepost op: 08 mei 2006 - 15:40 |
|
|
|
Crew algemeen
|
Dat zou kunnen, maar dan moet je in het script een nieuwe constante aan maken.
Als je het zo doet hoeft dat niet.
Zo word gewoon gekeken of het gebruikerslevel in de string van 'level' voorkomt.
Je kunt dus levels blijven toevoegen, alleen moet je niet het levelNr veranderen.
Maar dat lijkt me ook nergens voor nodig...:?: |
|
|
|
Gepost op: 08 mei 2006 - 17:35 |
|
|
|
PHP expert
|
mooi en handig script
edit:
maar nu worden toch altijd de links geprint aangzien je SELECT * FROM menu doet selecteer hij alles maar hij moet toch alleen alleen de pagina's waar jij rechten tot hebt printen..
ook snap ik niet waarom je veld pagina in de tabel zet maar dat zal wel horen bij het voorbeeld |
|
|
|
Gepost op: 08 mei 2006 - 22:39 |
|
|
|
Crew algemeen
|
Nou, ik zal proberen het nog iets duidelijker uit te leggen.
Je haalt alles op uit de database, vervolgens kijkt het script (de functie) of je toegang hebt tot die pagina.
Dit word gedaan a.d.h.v. 'view' en 'level'.
De check:
if(menuToegang($aFetch['level'], $aFetch['view'], $iLevel))
{
echo '<a href="'.$aFetch['pagina'].'">'.$aFetch['naam'].'</a><br />';
}
if(menuToegang($aFetch['level'], $aFetch['view'], $iLevel)) { echo '<a href="'.$aFetch['pagina'].'">'.$aFetch['naam'].'</a><br />'; }
Dus alleen als de functie 'true' opleverd word de link op het scherm gezet, anders niet.
Dat veld 'pagina' is inderdaad voor het voorbeeld.
Het voorbeeld is een dynamisch menu dat je via de database kunt bewerken.
Dan is het ook handig als je de pagina waar naartoe gelinkt moet worden kunt opgeven hè
Zo beetje duidelijker?
Ga anders gewoon eens met het script 'spelen'.
Leer je altijd weer iets meer van dan alleen naar mijn vage uitleg te kijken |
|
|
|
Gepost op: 12 augustus 2006 - 17:15 |
|
|
|
Nieuw lid
|
ik hoby maar wat met php.
en ik vind dit wel een mooi systeemtje. maar ik snap niet hoe het werkt.
hoe je het toe past.
in het voorbeeld $iLevel elke werde geven maar er gebuirt niks met de links?!
kan niemand mij dit uitleggen?
|
|
|
Enkel aanvullende informatie, vragen en antwoorden op vragen zijn welkom. |
|
|
|