20. 12. 2009

PostNuke - Práva v praxi : Bloky

Tak a jsme u cíle ... Poslední díl tohoto seriálu popisuje možnosti nastavení chování pro bloky.

Pro připomenutí

Doufám, že čtenáře neurazím, když připomenu, co jsou to bloky a kde se nachází. Bloky jsou nedílnou součástí vzhledu PostNuke, které se v drtivé většině případů umísťují do levé, střední a pravé části stránky. V rámci jejich administrace však můžete víceméně určit, kde se jaký blok nachází, nikoliv však kdo jej uvidí.
Než se pustíme do dalšího popisu, doporučuji, abyste si znovu pročetli článek Práva - komponenta, instance a další pojmy.

Co pro většinu bloků postačí?

V prvé řadě si v drtivé většině případů vystačíme s právy Nic, Číst a Administrace. Právo Nic zabrání tomu, aby byl blok zobrazen. Číst povoluje jeho zobrazení a Administrace může ve výjimečných případech zajistit přístup do administrace bloku.
Poznámka: Nezapomeňme na hvězdičkové řádky ... (viz článek Práva v praxi - začněme od píky). Řádek pro administrátory zajistí přístup k administraci všech bloků, řádek pro uživatele i pro neregistrované, zase pro změnu dovoluje všem zobrazení jakéhokoliv bloku. Chci-li tedy omezit zobrazení bloku určité skupině, pak musím příslušná práva nastavit mezi hvězdičkový řádek pr administrátory a uživatele.

Příklad pro HTML blok

Připomeňme, že HTML blok umožňuje zápis HTML kódu a jeho zobrazení v příslušné části stránky (například je vhodný pro základní kontaktní informace). tento blok je spravován souborem includes/blocks/html.php a v něm je pomocí funkce pnSecAddSchema() určena komponenta 'HTMLblock::' => 'Block title::'.
Předpokládejme tedy, že si vytvoříte HTML blok s názvem Kontakty a navíc nechcete, aby byl tento blok zobrazen skupině Útočníci a neregistrovaným uživatelům. Pak nastavíte práva:
Skupina
Komponenta
Instance
Oprávnění
Útočníci
HTMLblock::
Kontakty::
Nic
Neregistrovaní
HTMLblock::
Kontakty::
Nic
Poznámka:
  • Co by se stalo, kdybychom druhý řádek neuvedli? Předpokládejme přitom, že někde pod příslušným řádkem existuje i řádek hvězdičkový, který nastavuje pro neregistrované právo číst.
    V takovém případě by vznikla paradoxní situace, kdy registrovaní uživatelé ze skupiny Útočníci by blok neviděli, ale neregistrovaní ano. A to nemá logiku ...
  • Co by stalo, kdybychom neuvedli první řádek?
    V takovém případě se znepřístupní blok pouze pro neregistrované... A to již logiku má.

Kde jednoduchá práva nestačí ...

Existuje velmi málo bloků, které nabízejí větší možnosti. Uvedeme dva velmi blízké bloky. Prvním z nich je tzv. generické menu, které je řešeno souborem includes/blocks/menu.php. V něm najdete funkci pnSecAddSchema(), včetně komponenty ''Menublock::', 'Block title:Link name:'.
Předpokládejme tedy, že máte genrické menu Rozcestník a v něm řádky Administrace, Statistika, Poslat článek, Vytvořit stránku a Registrace. Dále si řekněme, že položky Administrace a Statistika mohou vidět jen Administrátoři. Položky Poslat článek a Vytvořit stránku mohou vidět jen registrovaní uživatelé. Naopak neregistrovaní vidí položku Registrace, ale ostatní zmíněné položky vidět nesmí. Pak práva budou sestavena následovně:

Skupina
Komponenta
Instance
Oprávnění
Všichni uživatelé
Menublock::
Rozcestník:Registrace:
Nic
Admnistrátoři
.*
.*
Administrátor
Všichni uživatelé
Menublock::
Rozcestník:(Administrace|Statistika):
Nic
Neregistrovaní
Menublock::
Rozcestník:(Administrace|Statistika|Poslat článek|Vytvořit stránku):
Nic
Všichni uživatelé
.*
.*
Komentovat
Neregistrovaní
.*
.*
Číst
Než se pustíme do vysvětlování, upozorňuji, že jsem záměrně do práv umístil i hvězdičkové řádky. Pokud budete číst pozorně, pochopíte proč.
Hned a okraj okomentuji pro jistotu hvězdičkové řádky, protože budou hrát důležitou roli. Administrátoři od daného hvězdičkového řádku mohou vše (tedy si přečtou všechny položky v menu rozcestník). Posledních dva řádky zase určují, že uživatelé a následně i neregistrovaní si vše přečtou (takže si také vše přečtou).
Co tedy jednotlivé řádky znamenají:
  • První řádek určuje, že žádný registrovaný uživatele neuvidí řádek Registrace.
    A teď vcelku důležitá věc - tento řádek předchází hvězdičkovému řádku pro Administrátory. Pouze díky tomu neuvidí položku Registrace ani Administrátoři. Pokud by byly řádky prohozené, pak by se pro administrátora uplatnil hvězdičkový řádek a ostatní řádky by se již neprocházely.
  • Třetí řádek odstraňuje všem registrovaným uživatelům z nabídky položky Administrace a Statistika. Nicméně administrátoři tyto položky uvidí, protože byl uplatněn hvězdičkový řádek, který je umístěn výše.
    Otázkou je, co platí pro neregistrované uživatele? Zde je jednoduchá odpověď - vše řeší čtvrtý řádek. Kdyby však ve čtvrtém řádku nebyly uvedeny položky Administrace a Statistika, popřípadě by tento řádek vůbec nebyl uveden, pak by paradoxně k položkám měli přístup neregistrovaní...
  • Čtvrtý řádek (jak bylo zmíněno před chvílí) brání zobrazení příslušných položek u neregistrovaných uživatelů.
  • Předposlední a poslední řádek pak zajišťuje zobrazení zbývajících položek pro všechny registrované uživatele či neregistrované. O tom jsem se ale zmínil již na začátku tohoto rozboru.
Nemálo z vás jistě bude používat blok Dynamenu. O systému práv pro tento blok jsem se zmiňoval již v článku Práva - komponenta, instance a další pojmy. a v článku Upravujeme vzhled - Dynamické menu (2.část) jsem se odkazoval na originální manuál, konkrétně na kapitolu 7 pasáž MENU PERMISSIONS.

Jeden tip na závěr,

o kterém jsem se již zmínil. U příkladu s generickým menu se objevil řádek nad hvězdičkovým řádkem pro Administrátory. Za normální situace byste se měli tomuto případu vyhnout jako čert kříži.
Nicméně výjimky potvrzují pravidlo ... A výjimkou je právě případ, kdy potřebujete omezit práva pro Administrátora. Jednu výjimku jsem uvedl u menu. Přidám však ještě jinou, o poznání zajímavější.
Chcete-li, aby se na úvodní stránce zobrazily informace pouze neregistrovaným uživatelům (například upoutávka ...), pak je jednou z efektivních možností vytvoření HTML bloku s danou informací a následně zakázání jeho zobrazení všem registrovaným uživatelům. A pokud toto právo přidát před hvězdičkový řádek administrátora, pak tento blok neuvidí ani on.

Vážení,
tímto článkem končím seriál o právech. Doufám, že vám byl k užitku a pevně věřím, že od tohoto momentu dokážete efektivněji využívat systém práv v PostNuke. Podotýkám však, že ne vždy práva fungují podle našich představ, nezapomeňte tedy na naše diskusní fórum Práva, které je určené právě pro tuto problematiku.