Pokud využíváme autentifikaci, je již jen krok k tomu rozdělit
uživatele do několika kategorií, podle toho, co v aplikaci mohou
dělat. Nejprve samozřejmě musíme upravit soubor
local.inc.
class IShop_Perm extends Perm {
var $classname = "IShop_Perm";
var $permissions = array(
"admin" => 1,
"uzivatel" => 2,
"dealer" => 4
);
function perm_invalid($does_have, $must_have) {
global $perm, $auth, $sess;
include("perminvalid.ihtml");
}
}
Opět jsme název třídy změnili z Poe_Perm na
IShop_Perm podle názvu naší aplikace.
Pomocí pole $permission si definujeme jednotlivá
práva, která mohou mít uživatelé. My jsme definovali tři práva
admin, uzivatel a
dealer. Číselné konstanty musí být mocninou dvou, aby je
šlo navzájem kombinovat pomocí logického součtu.
Přiřazení práv jednotlivým uživatelům se provádí v tabulce
auth_user. Poslední položka může obsahovat čárkami
oddělený seznam přístupových práv. POZOR: Při oddělování práv nesmíme
okolo čárky psát žádné mezery.
Pokud by tedy johny měl mít práva admin,
přidáme do tabulky auth_user následující záznam
INSERT INTO auth_user VALUES('30f2d6b514ace85f8ad805c146df2744','johny','walker','admin')
Pokud by měl mít práva uzivatel a dealer
zároveň, použijeme příkaz:
INSERT INTO auth_user VALUES('30f2d6b514ace85f8ad805c146df2744','johny','walker','uzivatel,dealer')
V typické aplikaci obvykle potřebujeme některé stránky zpřístupnit
jen určité skupině uživatelů. K tomu slouží metoda
check(oprávnění):
<?
page_open(
array("sess" => "IShop_Session",
"auth" => "IShop_Auth",
"perm" => "IShop_Perm"));
$perm->check("admin");
?>
<html>
... na tuto stránku se dostane jen uživatel s oprávněním admin...
</html>
<? page_close() ?>
Další typickým příkladem je, kdy se funkčnost stránky drobně
odlišuje podle oprávnění uživatele. Využijeme k tomu metodu
have_perm().
<?
page_open(
array("sess" => "IShop_Session",
"auth" => "IShop_Auth",
"perm" => "IShop_Perm"));
?>
<html>
<head>
<title>Nějaká stránka</title>
</head>
<body>
<h1>Nadpis pro všechny</h1>
<? if ($perm->have_perm("admin")): ?>
Pro všechny správce tu máme pro potěchu oka pěkný obrázek
<img src="kocka.jpg" width="300" height="200"
alt="V textovém prohlížeči si tu fotku moc neužijete">
<? endif ?>
Tento text je už zase pro všechny...
</body>
</html>
<? page_close() ?>
Oprávněními uživatelů ukončím krátký exkurz do schopností knihovny PHPLIB. Nepopsal jsem zde zdaleka všechny možnosti využití knihovny. K dispozici jsou u všech popsaných tříd i další metody. Navíc PHPLIB nabízí další funkce. Může vytvářet uživatelské proměnné, které si aplikace pamatuje pro každého uživatele, který se autentifikoval. K dispozici jsou třídy pro snadnou tvorbu formulářů, jednoduchých nákupních košíků, export výsledků databázových dotazů do formátu CSV a další. Popsané postupy však v 95 % případů postačí pro většinu webových aplikací.