Menu met levels
Auteur: Rens - 07 mei 2006 - 20:15 - Gekeurd door: Thomas - Hits: 12257 - Aantal punten: 4.63 (4 stemmen)
Als eerste een stukje uitleg om het wat begrijpelijker te maken.
De functie zorgt er voor dat er gekeken word of de bezoeker toegang heeft tot een bepaalde pagina.
Er zijn minimaal 2 dingen nodig, 'view' en 'level'.
'View' kan 4 verschillende waarden bevatten, namelijk:
0 = Altijd
1 = Ingelogd
2 = Uitgelogd
3 = Speciaal level
Als je '0' invult in 'view', is de pagina altijd toegankelijk voor elke bezoeker.
Maar als je '1' invult, moet de bezoeker ingelogd zijn om de pagina te kunnen bekijken.
Bij '2' moet de bezoeker uitgelogd zijn, en bij '3' moet de bezoeker een speciaal level hebben
om de pagina te kunnen bekijken.
Dan is er nog 'level'.
Die hoef je alleen maar in te vullen als 'view' op '3' staat.
Daarvoor zijn net zoveel verschillende waarden als je gebruikerslevels hebt.
Even een klein voorbeeldje:
crew = Voor de hele crew
0 = Lid
1 = Medewerker
2 = Admin
3 = Super-Admin
4 = Co-Beheerder
5 = Beheerder
De 'view' en 'level' worden uit de database gehaald.
Dan word er in de functie gekeken of de bezoeker de pagina mag zien.
Als de bezoeker bijvoorbeeld level 2 heeft, dus hij/zij is een Admin, mag hij pagina's bezoeker waarbij het level op '2' staat
of op 'crew'.
Er kunnen meerdere levels worden ingevuld in 'level'.
Deze worden dan gescheiden door een komma.
Dus als een Medewerker en een Beheerder op pagina.php mogen komen, zet je het volgende in 'level':
'1,5'
Om het te testen kun je het scriptje voorbeeld.menu.php gebruiken.
Bij de variabele $iLevel kun je verschillende levels proberen.
Ik hoop dat het zo duidelijk is...
Als je het niet snapt a.d.h.v. deze uitleg moet je maar eens wat gaan spelen met de code.
Extra rijen in de MySQL tabel zetten en zo.
Denk dat het dan duidelijker word...
|
Code: |
Voorbeeld MySQL code:
CREATE TABLE menu (
id INT(11) NOT NULL auto_increment,
naam VARCHAR(255) NOT NULL,
pagina VARCHAR(255) NOT NULL,
view TINYINT(1) NOT NULL,
level VARCHAR(255) NOT NULL,
PRIMARY KEY(id)
)TYPE=MyISAM;
INSERT INTO menu (naam, pagina, view, level) VALUES ('Begin', '?pagina=begin', 0, 0);
INSERT INTO menu (naam, pagina, view, level) VALUES ('Aanmelden', '?pagina=leden/aanmelden', 2, 0);
INSERT INTO menu (naam, pagina, view, level) VALUES ('Inloggen', '?pagina=leden/inloggen', 2, 0);
INSERT INTO menu (naam, pagina, view, level) VALUES ('Uitloggen', '?pagina=leden/uitloggen', 1, 0);
INSERT INTO menu (naam, pagina, view, level) VALUES ('Admin menu', '?pagina=admin/index', 3, 'crew');
CREATE TABLE menu ( id INT(11) NOT NULL auto_increment, naam VARCHAR(255) NOT NULL, pagina VARCHAR(255) NOT NULL, view TINYINT(1) NOT NULL, level VARCHAR(255) NOT NULL, )TYPE=MyISAM; INSERT INTO menu (naam, pagina, view, level) VALUES ('Begin', '?pagina=begin', 0, 0); INSERT INTO menu (naam, pagina, view, level) VALUES ('Aanmelden', '?pagina=leden/aanmelden', 2, 0); INSERT INTO menu (naam, pagina, view, level) VALUES ('Inloggen', '?pagina=leden/inloggen', 2, 0); INSERT INTO menu (naam, pagina, view, level) VALUES ('Uitloggen', '?pagina=leden/uitloggen', 1, 0); INSERT INTO menu (naam, pagina, view, level) VALUES ('Admin menu', '?pagina=admin/index', 3, 'crew');
Voorbeeld menu code:
<?PHP
$iLevel = 0;
include "function.menu.php";
$sQuery = "SELECT * FROM menu";
if(!$rResult = MySQL_Query($sQuery))
{
echo "MySQL Error: ".MySQL_Error()."<br />";
echo "MySQL Errno: ".MySQL_Errno()."<br />";
echo "Bestand: ".__FILE__."<br />";
echo "Regel nr: ".__LINE__;
} else
{
while($aFetch = MySQL_Fetch_Assoc($rResult))
{
if(menuToegang($aFetch['level'], $aFetch['view'], $iLevel))
{
echo '<a href="'.$aFetch['pagina'].'">'.$aFetch['naam'].'</a><br />';
}
}
}
?>
<?PHP $iLevel = 0; include "function.menu.php"; $sQuery = "SELECT * FROM menu"; { echo "Bestand: ".__FILE__."<br />"; echo "Regel nr: ".__LINE__; } else { { if(menuToegang($aFetch['level'], $aFetch['view'], $iLevel)) { echo '<a href="'.$aFetch['pagina'].'">'.$aFetch['naam'].'</a><br />'; } } } ?>
function.menu.php:
<?PHP
/**
* @date 07-05-2006 20:00
* @param integer iLevel
* @param integer iView
* @param integer iUserLevel
* @return boolean
* @author Rensjuh <rensjuh@gmail.com>
**/
function menuToegang($iLevel, $iView, $iUserLevel="")
{
$bView = FALSE;
if($iView == 0)
{
$bView = TRUE;
} else if($iView == 1)
{
$bView = (IsSet($_SESSION['id']) && Is_Numeric($_SESSION['id']));
} else if($iView == 2)
{
$bView = (!IsSet($_SESSION['id']) || !Is_Numeric($_SESSION['id']));
} else if($iView == 3)
{
if(ereg(",", $iLevel))
{
$aLevel = explode(",", $iLevel);
$bView = ((In_Array($iUserLevel, $aLevel)) || ($iLevel == "crew" && $iUserLevel != 0));
} else
{
$bView = (($iUserLevel == $iLevel) || ($iLevel == "crew" && $iUserLevel != 0));
}
} else
{
$bView = FALSE;
}
return $bView;
}
?>
<?PHP /** * @date 07-05-2006 20:00 * @param integer iLevel * @param integer iView * @param integer iUserLevel * @return boolean * @author Rensjuh <rensjuh@gmail.com> **/ function menuToegang($iLevel, $iView, $iUserLevel="") { $bView = FALSE; if($iView == 0) { $bView = TRUE; } else if($iView == 1) { } else if($iView == 2) { } else if($iView == 3) { { $bView = ((In_Array($iUserLevel, $aLevel)) || ($iLevel == "crew" && $iUserLevel != 0)); } else { $bView = (($iUserLevel == $iLevel) || ($iLevel == "crew" && $iUserLevel != 0)); } } else { $bView = FALSE; } return $bView; } ?>
Bitwise versie (FangorN zijn idee):
<?PHP
/**
* @date 07-05-2006 20:00
* @param integer iLevel
* @param integer iView
* @param integer iUserLevel
* @return boolean
* @author Rensjuh <rensjuh@gmail.com>
**/
function menuToegang($iLevel, $iView, $iUserLevel="")
{
$bView = FALSE;
if($iView == 0)
{
$bView = TRUE;
} else if($iView == 1)
{
$bView = (IsSet($_SESSION['id']) && Is_Numeric($_SESSION['id']));
} else if($iView == 2)
{
$bView = (!IsSet($_SESSION['id']) || !Is_Numeric($_SESSION['id']));
} else if($iView == 3)
{
if($iLevel == "crew" && $iUserLevel != 0)
{
$bView = TRUE;
} else
{
$bView = ($iLevel & $iUserLevel);
}
} else
{
$bView = FALSE;
}
return $bView;
}
?>
<?PHP /** * @date 07-05-2006 20:00 * @param integer iLevel * @param integer iView * @param integer iUserLevel * @return boolean * @author Rensjuh <rensjuh@gmail.com> **/ function menuToegang($iLevel, $iView, $iUserLevel="") { $bView = FALSE; if($iView == 0) { $bView = TRUE; } else if($iView == 1) { } else if($iView == 2) { } else if($iView == 3) { if($iLevel == "crew" && $iUserLevel != 0) { $bView = TRUE; } else { $bView = ($iLevel & $iUserLevel); } } else { $bView = FALSE; } return $bView; } ?>
Download code (.txt)
|
|
Stemmen |
Niet ingelogd. |
|