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$