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