WebToDate/Neveřejná část/Reference

Z WebToDate
Skočit na navigaciSkočit na vyhledávání

Veřejné skripty

Prezentační skripty

Využití skriptů veřejné části se liší podle toho, zda modul pracuje v režimu interní nebo externí autentifikace. Pokud se jedná o interní autentifikaci, všechno se odehrává v rámci přihlašovacího skriptu modulu Registrace a personalizace a ve skriptech WebToDate pro dynamické zobrazování obsahu (zpráv, stránek a souborů). Pokud se jedná o externí autentifikaci, využívají se následující skripty v adresáři /scripts/modules/access/.

Skript Funkce
login.php Přihlašovací stránka, na které je umístěn přihlašovací formulář
logout.php Odhlašovací skript

Přihlašovací skript ve skutečnosti v tomto případě žádné přihlášení neprovádí, pouze se naplní údaje v uživatelské session. To znamená, že se ve chvíli odeslání přihlašovacího formuláře nekomunikuje s externím autentifikačním serverem, to se děje až při prvním pokusu o zobrazení stránky, která není veřejně přístupná. Vyplývá z toho mimo jiné to, že uživatel zde může zadat i špatné nevalidní údaje, v tomto kroku se tato skutečnost nezjistí.

Odhlašovací skript pak vymaže v session všechny relevantní údaje týkající se přístupů uživatele a přesměruje na stránku, ze které byl volán, pokud není schopen tuto stránku identifikovat tak přesměruje na úvodní stránku. Skript je určen k tomu, aby uživatel mohl následně znovu zadat jiné přihlašovací údaje.

Více viz kapitola Externí autentifikace.

Klíčová slova modulu

V předloze pro přihlašovací stránku login.php lze použít následující klíčová slova.

Klíčová slova použitelná v předloze pro přihlašovací stránku
Klíčové slovo Význam Poznámka
<!--WTD_REGISTR(USERNAME)--> Uživatelské jméno
<!--WTD_REGISTR(PASSWORD)--> Heslo
<!--WTD_IF(REQUIRED,"… text ….")--> Nejsou vyplněny oba povinné údaje


Formulářová pole a další možné parametry

Přihlašovací skript používá následující parametry

Parametry skriptu login.php pro přihlášení
Název pole nebo parametru Význam Poznámka
username Uživatelské jméno
password Heslo

Příklad přihlašovacího formuláře uvádí následující kód.

<form action="/scripts/modules/access/login.php" method="post">
<table>
<tr>
	<td align="right">
		<label for="username">Uživatelské jméno</label>
	</td>
	<td>
		<input type="text" name="username" id="username" value="<!--WTD_REGISTR(USERNAME)-->" maxlength="20" />
	</td>
</tr>
<tr>
	<td align="right">
		<label for="password">Heslo</label>
	</td>
	<td>
		<input type="password" name="password" id="password" value="<!--WTD_REGISTR(PASSWORD)-->" maxlength="20" />
	</td>
</tr>
<tr>
	<td align="right" colspan="2">
		<input type="submit" name="send" id="send" value="Odeslat" />
	</td>
</tr>
</table>
</form>


Administrační rozhraní

Nabídka modulu

Nabídka modulu vypadá následovně:

Nastavení

Globální
Stránky

Administrace

Předvolby
Přístupové kódy
Pravidla
Neveřejné zprávy
Uživatelé
Kontrola dat

K administrační části modulu mají přístup pouze administrátoři WebToDate.

Nastavení

Stránky

Zde se nastavuje zejména stránka, která se má zobrazit, pokud je uživatel přihlášen, ale k dané zprávě nemá přístup (Stránka pro odmítnutí přístupu). Nastavit lze tuto stránku pro každý jazyk, přesměrování na příslušnou stránku se pak řídí jazykem zprávy, která se má zobrazit.

Poznámka: Nic ovšem nebrání administrátorovi nastavit tu samou stránku pro všechny jazyky a tuto stránku opatřit příslušným hlášením ve všech jazycích.

Pokud je v předvolbách nastavena externí autentifikace, zobrazuje se v tomto formuláři ještě volba druhé stránky – Předloha přihlašovací stránky. Jedná se o předlohu pro skript /scripts/modules/access/login.php, který se používá pro přihlášení v případě externí autentifikace.

Administrace

Předvolby

Ve formuláři Předvolby se nastavuje pouze způsob autentifikace, ve většině případů se volí interní.

Volbu nastavte hned na začátku konfigurace modulu, volbu lze změnit i dodatečně. Volba má vliv na chování administrační části, např. na seznam stránek, které se nastavují v nabídce NastaveníGlobálníStránky.

Přístupové kódy

Pomocí této funkce se zadávají přístupové kódy odpovídající definovaným pravidlům modulu. Funkci má smysl používat pouze v případě, že je autentifikace nastavena na externí.

V pravé horní části se objevuje seznam položek obsahující název pravidla a přístupový kód. Klepnutím na název pravidla se ve spodní části zobrazuje formulář pro editaci této položky.

Ve formuláři musí být povinně vyplněna obě pole. Stejný přístupový kód lze zadat i pro více pravidel, naopak jednomu pravidlu je možné přiřadit pouze jeden přístupový kód. Do pole Kód lze zadat jakýkoliv textový řetězec, nabídka Pravidla obsahuje seznam pravidel definovaných pomocí funkce AdministracePravidla.

Význam zde nastavovaných položek je takový, že pokud zobrazovaná stránka (zpráva, stránka, zdroj) vyhovuje zvolenému pravidlu, je použit zadaný kód pro vyhodnocení přístup. Externímu autentifikačnímu serveru se zasílá trojice uživatelské jméno – heslo – kód, externí server vrátí zpět informaci o tom, zda uživatel má či nemá přístup. Tato funkce je podrobně popsána v kapitole Externí autentifikace.

Pravidla

Hlavním objektem, se kterým pracuje administrátor tohoto modulu jsou tzv. Pravidla. Pravidlem se rozumí skupina kritérií, u kterých lze jednoznačně říci, zda daná položka těmto kritériím vyhovuje. Součástí těchto kritérií může být:

  • Stav - je možné vztáhnout pravidlo pouze na stav Archivováno, na stav Publikováno či na oba tyto stavy
  • Publikace
  • Téma
  • Kategorie s možností "Včetně podkategorií"
  • Jazyk
  • Datum starší než (resp. počet dní, po kterém je zpráva považována za neveřejnou)
  • Datum mladší než (resp. počet dní, před kterým je zpráva považována za neveřejnou)
  • Vstupní pole obsahuje hodnotu (pole přizpůsobitelné struktury databáze zpráv má nějakou zadanou hodnotu)

Poslední uvedená možnost umožňuje řídit přístup k zprávám individuálně. Ve WebToDate se nadefinuje nějaké pole přizpůsobitelné struktury zpráv, do kterého uživatelé spravující obsah zapisují nějaké hodnoty ručně neboje volí pomocí číselníku. Pravidlo pak testuje na zadanou hodnotu, připadně lze jako hodnotu v pravidle použít výraz NOTNULL, který znamená, že pravidlo platí pokud pole obsahuje jakoukoli neprázdnou hodnotu.

Administrátor pak definuje jedno pravidla určující, zda daná zpráva patří do neveřejné části (toto pravidlo určuje, které zprávy jsou neveřejné, ostatní, které tomuto pravidlu nevyhovují, jsou veřejné).

Dále může administrátor definovat libovolné množství pravidel, která mohou jemněji dělit množinu neveřejných zpráv a tato pravidla přiřadit různým skupinám uživatelů (skupiny uživatelů jsou definovány v modulu Registrace a Personalizace).

V definici pravidel se nastavená kritéria v jednom pravidle spojují logickou spojkou "a zároveň". Např. na předchozím otisku obrazovky se tudíž jedná o výběr položek, které patří do kategorie "Dokumenty" a zároveň jsou starší než 30 dní.

Při vyvolání skriptu pro zobrazení položky se postupuje takto:

  1. Zjistí se, zda daná položka vyhovuje alespoň jednomu pravidlu pro neveřejné zprávy, pokud ano, uživatel je přesměrován na přihlašovací skript (pokud se ještě nepřihlásil)
  2. Jakmile se uživatel přihlásil, je vrácen zpět na stránku pro zobrazení vybrané položky, přičemž díky přihlášení je známo, v jaké je skupině.
  3. Spustí se algoritmus pro testování pravidel přiřazených dané skupině uživatelů. Jakmile nějaké pravidlo vrátí, že daná zpráva tomuto pravidlu vyhovuje, dál se již netestuje a zpráva se zobrazí. Pokud se zjistí, že daná zpráva nevyhovuje žádnému pravidlu pro danou skupinu uživatelů, je uživatel přesměrován na příslušnou stránku, která říká, že k dané zprávě nemá přístup. V tomto případě pravidlo určuje, zda daná skupina uživatelů má k dané zprávě přístup.

U každé položky je volba všechny, což znamená, že daná položka není do pravidla zahrnuta. Stejně jako seznamy obsahuje formulář pro pravidla tlačítko Test, které zobrazí prvních 10 zpráv vyhovujících danému pravidlu.

Pravidla se aplikují při zobrazování zpráv, stránek a souborů z databáze zdrojů. Co se týká stránek WebToDate, mohou vyvstat dva různé požadavky na přístup k nim. Chceme např. omezit přístup k obsahu určité kategorie ve stromu kategorií WebToDate. To v praxi může znamenat, že buď požadujeme přihlášení pro kompletní obsah, tj. zprávy, soubory i stránky, které prezentují seznamy položek v této kategorii apod., nebo chceme zamezit přístupu anonymních uživatelů ke zprávám a souborům, ale naopak chceme, aby uživatelé měli možnost zobrazit výpis obsahu dané kategorie, tj. zobrazit běžné stránky WebToDate v této kategorii a teprve po klepnutí na odkaz na konkrétní zprávu vyžadovat přihlášení. Pro tyto účely je v definici pravidla zaškrtávací okénko Aplikovat i na stránky. Pokud není zaškrtnuto, při zobrazení stránky WebToDate (což odpovídá URL /scripts/detail.php?pgid=xxx) je dané pravidlo ignorováno.

Neveřejné zprávy

V sekci Neveřejné zprávy se vybírají pravidla pro stanovení, zda zpráva je neveřejná. Formulář obsahuje pouze dvě pole, na jedné straně seznam použitých pravidel a na druhé seznam ostatních pravidel (obdobný interface jako pro nastavení přístupových práv pro moduly).

Uživatelé

V sekci Uživatelé se nastavuje, která pravidla určují přístup kterým skupinám uživatelů. V horní části se zobrazuje seznam skupin uživatelů a počet nastavených pravidel (aby administrátor viděl, kterým kategoriím nastavil pravidla), v dolním formulář stejný jako pro Neveřejné zprávy, kde ovšem nastavení platí pro skupinu uživatelů vybranou nahoře.

Využití této funkce má smysl jen v případě, že je nastaven typ autentifikace interní, v opačném případě se nepoužívá.

Pokud potřebujete vytvořit novou skupinu uživatelů, musíte se přejít do administrace modulu Registrace a personalizace, kde se skupiny uživatelů spravují.

To, že je nějaké pravidlo v poli Použitá pravidla znamená, že právě upravovaná skupina uživatelů ke zprávám vyhovujícím tomuto pravidlu přístup.

Kontrola dat

Aby byla pravidla modulu funkční nejen pro zprávy, ale i pro stránky a soubory z databáze zdrojů, musí být tyto soubory a stránky uloženy v privátní zóně – to znamená, že se nenacházejí v části www serveru, která je přímo přístupná, ale jsou uloženy v adresářích, na které není přímý přístup a odtud se načítají ve chvíli zobrazení pomocí dynamických skriptů. Jedině v tom případě je zajištěno, že lze ověřit přístupová práva a stránku či soubor poskytnout pouze tomu, kdo k této položce má dle pravidel modulu Neveřejná část přístup.

Funkce Kontrola dat vyhledává položky, které nejsou odpovídajícím způsobem zabezpečené. To znamená, že vyhovují pravidlům stanoveným pro neveřejné položky, ale nenacházejí se v privátní zóně.

Více o veřejné a privátní zóně naleznete v Referenční příručce WebToDate. Položky, které se zde vypíší je vhodné přesunout do privátní zóny, jinak je může zobrazovat a stahovat kterýkoli anonymní uživatel.

Externí autentifikace

Úvod

Modul umožňuje i externí autentifikaci. To znamená, že v takovém případě se při ověřování přístupu nepoužívá modul Registrace a personalizace, ale externí server. Při zobrazení určité položky (zprávy, stránky apod.) se v tomto režimu nejprve vyhodnocuje, zda je položka přístupná anonymním uživatelům či nikoliv – v tomto se oba režimy nijak neliší. V případě, že je zjištěno, že položka není anonymně přístupná, použije se algoritmus externího ověřování. Algoritmus ověřování v případě interní autentifikace je graficky znázorněn v kapitole Základní principy, algoritmus v případě externí autentifikace znázorňuje následující diagram.

V režimu externí autentifikace se nastavují dvojice pravidlo – kód. To znamená, že pokud zpráva (nebo jiný objekt) vyhovuje danému pravidlu modulu, je vyžadován zadaný kód. Kód je textový řetězec zadávaný administrátorem WebToDate pomocí funkce Administrace - Přístupové kódy modulu, v rámci uživatelské session je vytvářeno pole se dvěma sloupci:

  • Kód
  • Uživatel má / nemá přístup k danému kódu

Při zobrazování objektu se pak postupuje v tomto režimu následovně:

  • Je zjišťováno, zda je či není daná stránka anonymně přístupná. Pokud není, vyžaduje se přihlášení, přičemž toto přihlášení se provádí přes formulář modulu (/scripts/modules/access/login.php). Pokud se již uživatel přes tento formulář přihlásil, je jeho uživatelské jméno a heslo v uživatelské session a tudíž se stránka pro přihlášení nezobrazí.
  • Prochází se pravidla modulu, která mají přidělen nějaký kód. Na základě těchto pravidel se odvodí, zda uživatel má či nemá přístup k dané položce. Pokud má, je položka zobrazena, jinak je přesměrován na stránku Odmítnutí přístupu.

Pro pravidla a jejich kódy platí:

  • Každé pravidlo může mít přiřazen maximálně jeden kód.
  • Jeden kód může být použit pro více pravidel.

Při testování pravidel a kódů se postupuje následovně:

  • Zjišťuje se, zda zpráva vyhovuje pravidlu. Pokud ne, postupuje se na další pravidlo.
  • Pokud zpráva pravidlu vyhovuje, zjistí se kód nastavený pro pravidlo. Kód se nejprve hledá ve výše zmíněném poli v session (aby nedocházelo k zbytečnému dotazování na externí server). Pokud je zde kód nalezen, je použita tato informace a uživateli je stránka zobrazena nebo přístup odmítnut.
  • Pokud kód není nalezen v session, vyvolá se dotaz do externího zdroje (zasílá se jméno, heslo a kód). Externí zdroj vrátí informaci, zda k danému kódu je nebo není uživatel autentifikován. Tato informace se v každém případě přidá do tabulky kódů v session. Pokud uživatel je autentifikován, stránka se zobrazí, jinak se pokračuje na další pravidlo.
  • Jsou-li projita všechna pravidla a uživateli nebyl přístup podle nějakého pravidla povolen, nelze stránku zobrazit a přístup je zamítnut.

Funkce pro dotazování externího zdroje jsou umístěny do samostatné části tak, aby se jednalo o vyměnitelný plugin. Modul sám používá abstraktní funkci, která má jako parametry už. jméno, heslo a kód, funkce vrací hodnoty povolení / odmítnutí přístupu, takže samotný modul je odstíněn od vlastní komunikace s externím zdrojem.

V této chvíli je dostupný pouze plugin pro bránu POSTABO, která řeší předplatné novinových titulů a registrace těchto předplatitelů, další pluginy mohou být v budoucnu přidány.

Postup konfigurace

Doporučený postup konfigurace je následující:

  1. V předvolbách modulu se nastaví externí režim autentifikace.
  2. Vytvoří se předloha pro přihlašovací stránku, vzorový kód přihlašovacího formuláře je uveden v kapitole Formulářová pole a další možné parametry.
  3. Definují se pravidla modulu a nastavení AdministraceNeveřejné zprávy; v tomto se postup nijak neliší od postupů pro interní autentifikaci.
  4. Pomocí funkce AdministracePřístupové kódy se definují dvojice pravidlo – kód. V tomto režimu se vůbec nepoužívá funkce AdministraceUživatelé. Výslednou funkčnost ovlivňují pouze pravidla, která jsou nastavena pomocí funkce Neveřejné zprávy a ta, která jsou uvedená v seznamu Přístupové kódy. V databázi modulu (tj. v seznamu Pravidla) mohou být definována i jiná pravidla než která pak figurují v obou zmíněných nastaveních, ta jsou při vyhodnocování přístupu kompletně ignorována.
  5. Definuje se stránka Odmítnutí přístupu. Na stránky webové prezentace je možné umístit odkazy na skript pro přihlášení a odhlášení, na přihlašovací skript je ovšem uživatel v případě potřeby přesměrován automaticky.
Poznamenejme ještě jednou, že v tomto režimu se nevyužívají funkce modulu Registrace a personalizace, tedy ani jeho přihlašovací stránka /scripts/modules/registration/login.php, místo toho se využívá vlastní přihlašovací stránka /scripts/modules/access/login.php.

Plugin pro bránu POSTABO

Momentálně je k dispozici pouze ověřovací plugin pro bránu POSTABO pro správu předplatitelů novinových titulů. Kód pluginu se nachází v souboru /scripts/modules/access/external/_com_inc.php. Jako přístupové kódy se používají číselné kódy odpovídající jednotlivým novinovým titulům, jak je používá tento server.

Do konfiguračního souboru global.php je nutné pro komunikaci s tímto serverem umístit konstantu definující URL brány:

define( 'EXTERNAL_ACCESS_SERVER', 'https://postabo.cpost.cz/pet/pet.php/');

Komunikace s bránou je vedena před protokol https. Funkce vyžaduje v PHP aktivní extenzi CURL, je tedy třeba např. ve Windows verzi odkomentovat v souboru php.ini následující řádek:

extension=php_curl.dll