Oprßvn∞nφ u₧ivatel∙ v PHPLIB

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

© Ji°φ Kosek 1999
$Id: autorizace.html,v 1.2 2000/10/30 10:21:48 Admin Exp $