3. 12. 2009

PostNuke - Práva : komponenta, instance a další pojmy

V úvodním díle nového seriálu jsme si popsali obecný princip nastavování práv v PostNuke. Je však předpokládám zřejmé, že zápis některých údajů nemůže být tak triviální a musí se dodržovat určitá syntaxe.

Nejprve síla práv

V "běžném počítačovém" (zvláště Unixovém) světě se setkáváme s třemi právy R - čtení, W - zápis a X - spuštění. PostNuke může pro každé právo (rozuměj řádek v tabulce) nastavit tuto sílu (od nejmenší po největší):
  • None = Nic : žádný přístup neboli nulové právo
  • Overview = Prohlížet : může nahlédnout na obsah nebo část obsahu (většinou úvodník nebo upoutávku)
  • Read = Číst : -objekt je kompletně k přečtení
  • Comment = Komentář : je možné k obsahu přidat komentář
  • Moderate = Moderovat : obsah může být příslušným uživatelem moderován
  • Edit = Úprava : obsah objektu může být upravován a měněn
  • Add = Přidat : je možné přidat nový objekt s novým obsahem
  • Delete = Smazat : uživatel může mazat objekty
  • Admin = Administrátor : uživatel má plná práva a tudíž může i vstoupit do adminstrace a nakonfigurovat rozhraní pro správu objektů
Asi stojí za vysvětlení, co znamená v tomto případě pojem objekt. To je závislé na modulu či bloku. U článků se může jednat o článek nebo téma, u fotogalerie to může být fotka nebo album u dynamického menu je to pak položka ....
Zároveň je důležité upozornit na to, že většina bloků a modulů využívá pouze část práv, pro některé stačí třeba jen tři (Nic, číst, Administrátor).

Komponeta a instance

Abychom mohli odlišit, jaké části systému (zjednušeně řečeno modulu či bloku) se příslušné právo týká, využíváme k tomu tzv. komponenty. Zápis komponenty je jednoznačný a musí být do puntíku přesně napsán (ještě lépe - opsán). Takže příklady z prvního dílu v podobě Články nebo Fotogalerie je dozajista nepoužitelný.
Instance určuje skupinu objektů z dané komponenty, pro kterou chceme dané právo použít. Zde již musíme napsat zápis, který definuje danou skupinu objektů, například u článků název tématu, u fotogalerie název albumu apod.

Kde najdu konkrétní zápisy komponent a instancí?

V prvé řadě musíme odlišit, zda chceme nastavovat právo pro modul nebo pro blok.
U modulu doporučuji, abyste si otevřeli soubor /modules/nazevmodulu/pnversion.php (případně ještě starší verzi Version.php). V něm najdete definici proměnné $modversion['securityschema'], která obsahuje asociativní pole (oddělená znakem "=>"). První položka obsahuje komponentu (to je nutné přesně opisovat), druhá instanci (zde je nutné napsat konkrétnější výběr skupiny objektů).
Příklad - pro články se používá modul News. Pro něj se využívá soubor /modules/nazevmodulu/Version.php. Uvnitř najdete dva prvky pole $modversion['securityschema']:
  • 'Stories::Story' => 'Author ID:Category name:Story ID'
    Komponenta 'Stories::Story' určuje, že se budou omezovat články dle jeho vlastností. Za instanci se pak musí dosadit konkrétní zápis. Například:
    • 2:: říká, že příslušné právo se omezí na uživatele s ID 2.
    • :Učitelé: omezuje práva pouze na články, které patří do kategorie Učitelé. (Poznámka: využíváme na webu školy ZŠ Hustopeče nad Bečvou)
    • ::145 nastavuje práva pouze pro článek s ID 145

  • 'Stories::Category' => 'Category name::Category ID'
    Tato komponenta určuje oprávnění k vytváření Kategorií článků (tuto možnost najdete při schvalování článků). Pro naše seznamování však není nutné detailněji vysvětlovat.
Pro zpřísupnění určité skupiny článků je však důležitá i jejich příslušnost k tématu. Zde se využívá modul Topics a v rámci něho soubor /modules/nazevmodulu/pnversion.php. Zde najdete opět dva prvky, přičemýž nás bude zajímat pouze ten první:
  • 'Topics::Topic' => 'Topic name::Topic ID'
    Komponenta 'Topics::Topic' určuje, že se bude omezovat na základě příslušnosti k tématu. Za instanci se dosazují konkrétní zápisy. Například:
    • Pro vybrané:: říká, že příslušné právo se omezí na objekty, které náleží tématu Pro vybrané.
    • ::5 nastavuje práva pouze pro objekty v tématu s ID 5

Pro bloky to funguje obdobně s tím, že konkrétní zápis najdete přímo ve zdrojovém kódu příslušného bloku. Zdrojové kódy bloků se většinou nacházejí v adresáři /includes/blocks/ (tzv. bloky Core), případně v adresáři /modules/nazevbloku/pnblocks/. Otevřete-li si zdrojový kód, najdete v něm funkci pnSecAddSchema(). Její obsah pak opět definuje komponentu a následně instanci. Připomínám, že komponenta se opisuje a místo instance se zapíše výraz.
Pro bloky jen malá poznámka - u nich se v drtivé většině využívají pouze práva Nic, Čtení a Administrátor. Ostatní většinou nemají smysl.
Příklad - pro dynamické menu se využívá blok Dynamenu a tudíž soubor /includes/blocks/dynamenu.php:
  • 'Dynamenublock::', 'Block title:(Link 1|Link 2):'
    Komponenta 'Dynamenublock::' určuje, že se bude omezovat zobrazení články dle jeho vlastností. Instance pak odlišuje, o který blok se jedná a případně jaké položky v menu budou omezeny. Například:
    • Hlavní nabídka:: omezí zobrazování pouze na dynamický blok s názvem Hlavní nabídka.
    • Hlavní nabídka:(Pro registrované|Administrace): rozšiřuje předchozí případ o dvě položky v menu, konkrétně položku Pro registrované a položku Administrace. (Poznámka: Využíváme při zobrazování menu v záhlaví podle toho, zda je uživatel přihlášen nebo se jedná o neregistrovaného návštěvníka).

Složité? Možná vám pomůže jednoduchá editace...

Jelikož jsme si byli vědomi toho, že nastavování práv ve standardním rozhraní (Administrace - Práva - Standardní editace) může být oříškem, pokusili jsme se pro začínající uživatele vytvořit jednodušší prostředí. To jsme poměrně obsáhle ve zvláštním dokumentu Permissions 1.4 - Správa práv, kde najdete i mail na autora těchto úprav, takže se na něj můžete případně obracet s prosbou o radu či pomoc.
Poznámka: Zkrácená verze příručky o jednoduché editaci práv je navíc součástí poslední verze příručky, konkrétně na stránkách 59-66.