12. 12. 2009

PostNuke - Práva v praxi : články

Předpokládám, že se shodneme v tom, že články tvoří základ systému PostNuke. Co mám tedy udělat pro to, abych omezil zobrazení článků některým uživatelům?

Projděme si příslusné komponenty

Chceme-li pracovat s právy pro články, musíme se zaobírat následujícími komponentami:
  • v souboru modules/News/Version.php najdete definici ' Stories::Story' => 'Author ID:Category name:Story ID'.
  • v souboru modules/Topics/pnversion.php najdete definici 'Topics::Topic' => 'Topic name::Topic ID'.
Popišme si komponentu Stories::Story. Pomocí této komponenty můžeme nastavovat práva vzhledem k autorům článků, názvu kategorií, které jsou článku přiděleny či přímo konkrétním článkům. Pro jistotu vysvětlím Název kategorie - jakmile administrátor schvaluje odeslaný článek v rámci formuláře může ze seznamu Kategorie vybrat příslušnou kategorii (administrátor může kategorie spravovat a tím může odlišovat přístup k článkům průřezově z rozdílných témat).
Konkrétně si ukážeme příklady zápisů instancí:
  • 2:: - určuje články, u kterých je autor s ID=2 (toto ID by měl mít administrátor)...
  • :Pro manažery: - předpokládejme, že jste si jako administrátor vytvořil kategorii Pro manažery. Tento zápis omezuje právo právě pro tuto kategorii.
  • ::6 - nastavuje omezení pro konkrétní článek s ID=6. Upřímně, nedokáži si představit praktické užití takového nastavení instance.
  • (2|5|84):: - tento zápis instance říká, že budeme nastavovat práva u článků, kde je autorem jeden ze tří uživatelů (ID=2 nebo ID=5 nebo ID=84). I zde bychom asi hledali jinou možnost přes vytvoření konkrétní skupiny, nicméně tento zápis ukazuje nastavení více možností najednou ...
  • 2:Pro manažery: - poslední ukázka omezuje články pouze na ty, kde je autorem uživatel s ID=2 a navíc článek patří do kategorie Pro manažery.
Kromě předchozího případu budete mít zájem omezit zobrazení článků i podle přiřazení k určitému tématu (rubriky). Pro tento účel využijete komponetu Topics::Topic. Zde je zápis instance o poznání srozumitelnější:
  • Novinky:: - určuje články, které byly přiřazeny do tématu s názvem Novinky.
  • ::(11|12|13|14) - vybírá články pouze z témat, která mají ID = 11 nebo ID = 12 nebo ID = 13 nebo ID = 14. Na tomto zápisu si ukazujeme, že můžete práva nastavit pro více témat najednou. Navíc toto nastavení má výhodu v tom, že pozdější přejmenování názvů témat nemají vliv na stávající podobu práv (ID se totiž během přejmenování nemění).
  • Tříd.*:: - pokud jste si vytvořili témata s názvy tříd (například Třída 1.A, Třída 1.B atd...), pak může být výhodné využití regulárního výrazu ...

Síla práv

Než se pustíme do konkrétních příkladů, ještě se podívejme na sílu práv, která se u článků využívají. Jelikož právě článkový systém tvoří základ celého PostNuke, využívají se veškerá práva:
  • None = Nic : žádný přístup, takže dané články nebudou vůbec zobrazovány
  • Overview = Prohlížet : může nahlédnout, takže články se zobrazí v seznamech článků v podobě názvu a úvodníku. samotný obsah článku však není vidět 
  • Read = Číst : -čtení, které umožňuje přečtení celého článku
  • Comment = Komentář : toto právo povoluje přidávat komentáře k článkům
  • Moderate = Moderovat : v tomto případě může oprávněný uživatel nejen komentovat, ale i moderovat diskusi (tj. i mazat nepatřičné komentáře)
  • Edit = Úprava : příslušný uživatel je oprávněn upravovat obsah článku a to i tehdy, pokud není jeho autorem
  • Add = Přidat : u článků toto právo nemá význam, protože přidávání článků je řešeno jiným postupem (zkušenější uživatelé snadno zjistí, že se využívá modul Submit_News)
  • Delete = Smazat : příslušný uživatel je oprávněn smazat článek a to i tehdy, pokud není jeho autorem
  • Admin = Administrátor : uživatel má plná práva a tudíž může i vstoupit do administrace modulu

Omezujeme přístup prostřednictvím témat

Pro modelovou situaci si připravíme dvě skupiny uživatelů Vyvolení a Nebezpeční. Dále příslušná práva budeme uplatňovat na články přiřazené do tématu HelpDesk. Skupina vyvolených bude moci upravovat obsah článků a tedy i moderovat komentáře (nikoliv však mazat), nebezpeční uživatelé a neregistrovaní neuvidí články vůbec, ostatní registrovaní uživatelé si budou moci články přečíst. Administrátoři samozřejmě mohou vše. Pak práva budou následující:

Skupina
Komponenta
Instance
Oprávnění
Administrátoři
Topics::Topic
HelpDesk::
Administrátor
Vyvolení
Topics::Topic
HelpDesk::
Úprava
Nebezpeční
Topics::Topic
HelpDesk::
Nic
Všichni uživatelé
Topics::Topic
HelpDesk::
Číst
Neregistrovaní
Topics::Topic
HelpDesk::
Nic
Prodiskutujme dva modelové případy, kdy práva nebudou patřičně fungovat:
  1. Pokud prohodíme řádky Nebezpeční a Všichni uživatelé, pak se nebezpeční uživatelé dostanou ke čtení článků. Nejpre se totiž vyhodnotí řádek platný pro všechny uživatele a protože i nebezpečný uživatel je registrovaný, povolí čtení článku. Další řádky již nemají žádný účinek.
  2. Pokud umístíme Vyvolené až za Všechny uživatele, nebudou mít vyvolení možnost upravovat příslušné články z daného tématu. Vysvětlení je obdobné jako u předchozího případu.

Omezujeme přístup prostřednictvím kategorií

I zde využijeme dvě skupiny uživatelů Vyvolení a Nebezpeční. Práva však budeme uplatňovat na kategorii Vedení. Skupina vyvolených bude moci komentovat články, registrovaní uživatelé si budou moci přečíst celý článek, nebezpeční uživatelé uvidí alespoň úvodník článků a neregistrovaní neuvidí články vůbec. Pak práva budou následující:

Skupina
Komponenta
Instance
Oprávnění
Vyvolení
Stories::Story
:Vedení:
Moderovat
Nebezpeční
Stories::Story
:Vedení:
Prohlížet
Všichni uživatelé
Stories::Story
:Vedení:
Číst
Neregistrovaní
Stories::Story
:Vedení:
Nic
I zde si okomentujme jeden případ...
Všimněte si, že příklad neobsahuje právo pro administrátory. Zde je podstatné, kde se nachází "hvězdičkový řádek" pro administrátory. Pokud je nad příslušnými řádky, pak je vše v pohodě, protože hvězdičkový řádek bude uplatněn dříve než by došlo na diskutované řádky.
Pokud by však byl pod nimi, mohl by vzniknout problém, a to podle toho, zda příslušný administrátor patří do jedné ze skupin nebo zda je "pouze" registrovaný. V každém případě nebude mít administrátor právo Administrace.
Poznámka: U předchozího případu je za normálních okolností první řádek přebytečný... Uvedl jsem jej pro uvědomění si pozice administrátora....

Na závěr doporučení: Omezování přístupu k článkům je nejčastější potřebou administrátorů. Chcete-li nastavovat práva pro více témat či kategorií, dobře si promyslete, nakolik lze seskupit nastavení do jednoho řádku (pomocí regulárních výrazů). Zvládnete-li tento úkol, za prvé zpřehledníte systém práv a za druhé dokážete efektivně nastavovat práva i u ostatních modulů.