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í.