Portál AbcLinuxu, 1. května 2025 15:17
Cílem tohoto blogpostu je seznámit zdejší obecenstvo s rozšířením Mediawiki, které jsem svého času vytvořil a které momentálně nemám čas zaktualizovat pro její novější vývojové verze.
Klasická mediawiki má systém práv založený na skupinách. Pokud instalujete novější verze mediawiki, tak se vás instalační skript při konfiguraci zeptá, jestli chcete wiki:
Jemnější nastavení práv tento systém neumožňuje. Rozšíření Accesscontrol však přidává navíc možnost vytvářet uzavřené uživatelské skupiny a to tak, že k tomu není zapotřebí obtěžovat správce. Pro větší názornost jsem vytvořil schematický obrázek
Uživatelské skupiny, se kterými pracuje Mediawiki, jsou v horizontální rovině. Uživatel Franta, který je přiřazen do skupiny "byrokrat" má stejná práva jako uživatel Tonda. Ale co když chce uživatel Franta vytvořit stránku k projektu na kterém spolupracuje s uživatelem Luboš, ale nikdo jiný by k se k těm datům dostat neměl? To je situace, kde se může s výhodou uplatnit rozšíření Accesscontrol, které umožňuje vytvářet uzavřené skupiny napříč uživatelských skupin Mediawiki.
Možná si i někdo z vás vzpomene, že jsem se tady o něm již jednou zmiňoval, v rámci blogpostu Zabezpečení mediawiki
Nejprve Franta nebo Luboš vytvoří stránku s názvem Sk:A, která bude fungovat jako seznam uživatelů co mají být členy této skupiny. A na ni napíše seznam uživatelských jmen osob, které mají mít ke stránkám projektu přístup. Do wiki kódu všech stránek, které mají být součátí projektu pak stačí přidat tag accesscontrol s názvem této stránky.
Rozšíření funguje tak, že ještě předtím než vrátí obsah stránky provede kontrolu kódu a pokud narazí na tento tag, zkontroluje v něm uvedené seznamy. Pokud na některém z nich najde username uživatele co na stránku leze, pokračuje se v jejím zpracování. V opačném případě ho vykáže do příslušných mezí.
Pochopitelně je žádoucí takto zabezpečit i samotný seznam uživatelů této skupiny. Při pokusu o přístup na takto zajištěnou stránku i uživatel Tonda ostrouhá. Jedinou výjimkou je uživatel Jenda, který je správcem wiki. I když i správce může mít omezen přístup do skupiny, není to moc praktické - obzvláště v případě, kdy se Luboš nebo Franta blbě uklepne a vloží do tagu chybné jméno uživatelského seznamu. Jenda má stále možnost chybu opravit.
Existují i jiná řešení problému. Accesscontrol má však tu výhodu, že si uživatelé mohou vytvářet své uzavřené skupiny po libosti, aniž by tím museli otravovat Jendu. Jako např. Marek, který si udělal svou skupinu Sk:B, do které nemůže z celé té partičky kromě Jendy nikdo.
Tak. A teď k věci. Tohle rozšíření jsem napsal já a momentálně funguje se všemi stabilními verzemi. Jenže od verze 1.21 se u MediaWiki změnil způsob, jakým se pracuje při generování stránky s textem a tak toto rozšíření ve vývojových verzích nefunguje - je-li aplikován současný kód, tak se nevrátí nic. Žádná tragédie, podobný problém byl i při přechodu na verzi 1.18, jenže já už dlouho s PHP nedělal a hrabu se teď v jiných věcech. Nejspíš bych se k tomu dostal až někdy v létě, ale pokud by chtěl někdo na tom zapracovat již teď, budu rád.
Rozšíření pro verzi 1.21 bylo nakonec aktualizováno díky neznámému přispěvateli na verzi 2.2 3.října 2013. a vývoji postupem času přispěli také další lidé, čímž jim touto cestou děkuji.
Aktuální verze 2.5, vydaná včera (tj. 25.srpna 2014), konečně nabízí řešení vleklé bolesti tohoto rozšíření, která souvisí s vyhledáváním. Pokud se hledaný výraz nachází na chráněné stránce, končilo vyhledávání přesměrováním. Teď lze toto přesměrovávání vypnout a jako bonus - obsah cílové stránky nahradit vlastním sdělením.
Je to k neuvěření. Šest let..
Tiskni
Sdílej:
Posílal jsem své patche Jeisenovi (autor IAC) a říkal, že bude IAC pravděpodobně upravovat, tak moje patche zařadí...8-D Nerad bych někomu bral iluze, ale doporučoval bych se podívat do historie stránek k příslušným rozšířením přímo na Mediawiki. Původní rozšíření - 'Group Based Access Control' - se objevilo 16. října 2006. V době kdy jsem potřeboval problém se skupinami vyřešit, bylo ve verzi 0.8 a podporovalo Mediawiki v. 1.11, jenže já ho potřeboval použít s verzí 1.12 a tam nefungovalo. Nejdřív jsem ho chtěl pouze upravit, jenže jsem zjistil že jeho kód má zásadní chyby a autor řadu věcí nedomyslel. Takže jsem to nakonec napsal úplně znovu. Chtěl jsem ale z hlediska obsahu Mediawiki zachovat kompatibilitu, takže jsem zachoval (až na ty čárky) syntaxi tagu i stránek s uživatelským seznamem. Aby byla zachována kontinuita, tak jsem do gitu uložil i všechny předchozí verze, které jsem vytahal z SVN. To bylo v srpnu 2008. Nechápu pohnutky tvůrce IAC, nicméně v době kdy vytvořil svůj klon (rozvněž založený na 'Group Based Access Control') byl Accesscontrol funkční a použitelný. Každopádně mne nijak nekontaktoval, takže předpokládám že se ani moc nedíval, jestli náhodou někdo jiný něco podobného neudělal. Ale to není můj problém. Drobnou úpravu bylo třeba provést až pro verzi 1.16 Od Mediawiki verze 1.18 byl odstraněn hook na kterém byl 'AccessControl' (i původní 'Group Based Access Control' ) navěšen, proto bylo třeba kód v podstatě přepsat. Proto také verze 2.0 Psal jsem to tehdy už pro 1.19beta, takže tato verze funguje i s aktuální stable verzí Mediawiki 1.20.3 Jak už jsem zmínil v blogu, od verze 1.21 přilepili do Mediawiki framework, který mění chování při generování stránek. Vím které části kódu je třeba upravit, ale háček je v tom že se změnilo nejspíš ještě něco jiného. Takže další verze bude nejspíš 3.0 Osobně mi přijde smysluplnější věnovat pozornost rozšíření, které pokrývá všechny verze Mediawiki od 1.11 nahoru a které je součástí oficiální repository, než vytvářet forky. Původní rozšíření už svou stránku na Mediawiki nemá řekl bych že IAC v dohledné době nejspíš také vyšumí. Ale proti gustu..
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.