(Translated by
https://www.hiragana.jp/
)
Bearbeiten von „Kamel Diskussion:J*“ (Absatz) – Kamelopedia
Bearbeiten von „Kamel Diskussion:J*“ (Absatz)
Wechseln zu:
Navigation
,
Suche
!
Du bist nicht
angemeldet
.
Wenn du deine Änderung speicherst, wird deine aktuelle IP-Adresse in der Versionsgeschichte aufgezeichnet und ist damit öffentlich einsehbar.
Spamschutzprüfung. Hier
NICHTS
eintragen!
Spamschutzprüfung. Hier
NICHTS
eintragen!
== Code-Review == Hi, J* ich hab' gerade (für mein eigenes Wiki) eine kleine Erweiterung einer [http://www.mediawiki.org/wiki/Extension:UserFunctions bereits bestehenden Extension] geschrieben (kann bislang noch kaum PHP, hat aber trotzdem nur 5 Minuten gedauert; *stolz*). Die Idee ist folgende: Mit <code><nowiki>{{#ifcan: action | fullpagetitle | then | else }}</nowiki></code> soll man abfragen können, ob der aktuelle Nutzer die Aktion (<code><nowiki>read, edit, create, move, etc.</nowiki></code>) auf die angegebene Seite (<code>fullpagetitle</code>) anwenden darf. z.B. für sowas: <code><nowiki>{{#ifcan:edit|MediaWiki:monobook.css|[{{fullurl:MediaWiki:monobook.css|action=edit}} Monobook bearbeiten]|[[MediaWiki:Monobook.css|Monobook ansehen]]}}</nowiki></code> ... oder für links zu verbuddelten Seiten oder überhaupt für links (da mein Wiki ja nicht öffentlich ist), etc. Die Kern-Funktion sieht so aus: <source lang="php"> function ifcan( &$parser, $action = '', $page = '', $then = '', $else = '' ) { global $wgUser; $parser->disableCache(); if($action!=='' && $page!==''){ $title = Title::newFromText($page); if ($title->quickUserCan($action)) { return $then; } return $else; } else return $else; } </source> Funktioniert bis jetzt alles ganz prima ... magst du trotzdem mal drübergucken? Und kannst du mir sagen, wie ich auf MediaWiki.org eine Code-review oder so beantragen kann? Fällt dir sonst noch was auf? Grüße, --[[Kamel:WiMu|WiMu]] 15:51, 12. Mär. 2010 (NNZ) P.S.: zu früh gefreut ... $wgWhitelistRead wird ignoriert, und bei Spezialseiten funzt's gar net ... *verdammt* --[[Kamel:WiMu|WiMu]] 16:52, 12. Mär. 2010 (NNZ) Nach BK (alter Text): :Der Code sieht doch ganz ordentlich aus. Ich frag mich nur, ob das disableCache() wirklich nötig ist - wenn du nicht häufig Nutzerrechte verändern willst, müsste es doch eigentlich auch ohne gehen und hätte den Vorteil, dass die Seite nicht jedes mal neu berechnet werden muss. Vermutlich trotzdem besser [[mit ohne]] Cache. :Nochmal ein anderer Aspekt: Solche Extensions wie die hier lassen sich nicht nur für angepasste Texte/Links nutzen sondern natürlich auch super um Spam vor den Admins zu verstecken: <nowiki>{{#ifcan: edit | geschützte_Seite | harmloser Text | Spam-Text}}</nowiki> (-; aber ist ja privates Wiki... :Ob und wie man einen Code-Review beantragen kann - keine Ahnung. Du könntest deine Extension aber z.B. [http://www.mediawiki.org/wiki/Manual:Extensions#Publishing_your_extension veröffentlichen] und hoffen, dass dir irgendjemand Feedback gibt. Grüße --[[Kamel:J*|J*]] 17:03, 12. Mär. 2010 (NNZ) Neuer Text: :whitelistRead ist doch global, müsstest du also direkt auslesen können... ansonsten schon mal [http://www.mediawiki.org/wiki/Category:User_rights_extensions die Extensions hier] durchsucht, ob da schon was dabei ist? Hm, Spezialseiten wird schwierig, vielleicht statt der direkten Berechtigungen abfragen, ob der Nutzer in einer bestimmten Gruppe ist (sysop, autoconfirmed, ...)? Grüße --[[Kamel:J*|J*]] 17:03, 12. Mär. 2010 (NNZ) :Und nochmal ich: könnte [http://www.mediawiki.org/wiki/Extension:RightFunctions die Extension da] vielleicht was für dich sein? --[[Kamel:J*|J*]] 17:08, 12. Mär. 2010 (NNZ) ::vor BK: ::gerade [http://www.mediawiki.org/wiki/Manual:Hooks/userCan das da] gefunden ... muss mich da wohl nochmal schlaumachen (da steht was ganz unten über whiteList); und bei Spezialseiten muss ich's anscheinend umgekehrt machen (nicht über $wgTitle, sondern ungefähr $blah->userCanExecute($wgUser) ); *kopfkratz* *mallieberaufssofaflanschen* ::P.S.: das cache-disablen ist auch bei allen anderen User-Functions mit drin, drum hab' ich das mal kopiert --[[Kamel:WiMu|WiMu]] 17:11, 12. Mär. 2010 (NNZ) ::nach BK: schau' ich mir mal an ... --[[Kamel:WiMu|WiMu]] 17:11, 12. Mär. 2010 (NNZ) :::Soweit ich das sehe, ist der userCan-Hook genau für das umgekehrte da: Eine extension kann hier manipulieren, was der User darf, und was nicht ... --[[Kamel:J*|J*]] 17:19, 12. Mär. 2010 (NNZ) Nach BK (der dritte): Ich bin ein Honk! Hab das $wgGroupPermissions und $wgWhitelistRead ganz ans Ende meiner LocalSettings geschrieben (''nach'' dem require_once) ... dann kann die Extension da ja auch gar nicht drauf zugreifen (wenn ich nicht irre) und Spezialseiten ''könnten'' dann auch funktionieren.<br \>Die RightFunctions-Extensions funktioniert übrigens ''ganzgenau'' so, wie ich das auch gemacht hab' *fühlmichbestätigt* --[[Kamel:WiMu|WiMu]] 17:24, 12. Mär. 2010 (NNZ) === Code-Review die 2. === Mööeep. Das doofe #ifcan funzt nicht, aber die Extension da oben tut's genau so wenig (ignoriert ebenfalls die whitelist); aber egal ... jetzt was neues. Weil mir das zu doof ist, jede öffentliche Seite per Huf in einen Array packen zu müssen, bin ich auf die Idee gekommen, das ganze über eine dynamische – will heißen geparste – MediaWiki Nachricht zu machen. Der Code sieht so aus: <source lang="php"> $wgExtensionFunctions[] = 'fnDynamicWhitelistSetup'; /** * extension setup */ function fnDynamicWhitelistSetup(){ global $wgHooks, $wgGroupPermissions; $wgGroupPermissions['*']['read'] = false; $wgHooks['UserGetRights'][] = 'fnDynamicWhitelist'; } /** * Adds pages listed in MediaWiki:Whitelist to $wgWhitelistRead * Always returns true so that other extensions using the UserGetRights hook * will be executed * * @params $user User object * @params $rights array of user rights * @return boolean true */ function fnDynamicWhitelist($user, $rights){ global $wgWhitelistRead, $wgParser; /** if user is not anonymous, then exit the script **/ if(!$user->isAnon()){ return true; } if (!is_object($wgParser)) { $wgParser = new Parser; $opt = $wgParser->mOptions; } if (!is_object($opt)) { $opt = ParserOptions::newFromUser($user); } $title = Title::newFromText('Whitelist', NS_MEDIAWIKI); $htmllist = $wgParser->parse(wfMsgForContent( 'Whitelist' ),$title,$opt)->getText(); $rawlist = preg_match_all ('/\<li\>\s*(.*)/', $htmllist, $array ); $wgWhitelistRead = $array[1]; return true; } </source> Ist ''fast'' das selbe wie [http://www.mediawiki.org/wiki/Extension:InternalWhitelist Extension:InternalWhitelist], nur mit dem Unterschied, dass erstmal der WikiParser angeworfen wird, bevor die Liste ausgewertet wird. Die MediaWiki-Systemnachricht sieht bei mir dann z.Zt. so aus: <pre> <!-- -- -- alle Seiten in der Kategorie "Public" sind öffentlich zugänglich -- -->{{#dpl: | mode = userformat | skipthispage = false <!-- sehr wichtig! Daran wäre ich fast verzweifelt --> | category = Public | format = ,,\n*%PAGE%, }}<!-- -- -- Stylesheets müssen auch öffentlich sein -- -->{{#dpl: | mode = userformat | skipthispage = false | namespace = MediaWiki | titlematch = %.css | format = ,,\n*%PAGE%, }} </pre> Funzt alles; und (*stolzwieoskar*) das deckt so ziemlich alle Userrights-Extensions ab, die so auf MediaWiki.org rumschwirren (und funzt zum Teil deutlich besser; z.B. das mit den Kategorien ... {{s}} [http://www.mediawiki.org/wiki/Extension:CategoryPermissions Extension:CategoryPermissions]). Einziger Nachteil, den ich bis jetzt sehe, sind die längeren Ladezeiten (derzeit ca. eine Zehntel Sekunde Unterschied zwischen eingeloggt und ausgeloggt). Fällt dir sonst noch was auf? Bei dem Regulären Ausdruck bin ich mir z.B. nicht 100%ig sicher, ob der auch immer und überall das richtige matcht ... und brauche ich das $title eigentlich unbedingt? Ist ja irgendwie doppelt gemoppelt (gibt aber kritischen Fehler, wenn ich das rauswerfe; ist aber umgekehrt auch egal, was ich in den Titel reinschreibe *kopfkratz*). Naja, ich muss ins Bettibett ... --[[Kamel:WiMu|WiMu]] 01:39, 16. Mär. 2010 (NNZ)
Zusammenfassung:
Mit dem Speichern dieser Seite …
… versichere ich, dass ich den Beitrag selbst verfasst habe bzw. dass er keine fremden Rechte verletzt
… willige ich ein, meinen Beitrag unter der
Creative Commons Attribution/Share-Alike Lizenz 3.0
und der
GNU-Lizenz für freie Dokumentation
zu veröffentlichen
… akzeptiere ich die
Kamelknigge
Abbrechen
|
Bearbeitungshilfe
(neues Fenster)
Zum Vermeiden unnötiger Artikelversionen bitte den
Vorschau-Button
benutzen!
Navigationsmenü
Ich
Ein neues Kamel registrieren
Anmelden
Namensräume
Kamelbau
Diskussion
Varianten
Ansichten
Lesen
Bearbeiten
+
Versionen/Autoren
Aktionen
Suche
Navigation
Hauptseite
Wegweiser
Zufällige Seite
Empfohlene Seiten
Schwesterprojekte
KameloNews
Gute Frage
Gute Idee
KameloBooks
Kamelionary
Spiele & Co.
Mitmachen
Letzte Änderungen
Herden-Portal
Forum
Chat
Qualitätssicherung
Hilfe
Werkzeuge
Links hierhin
Änderungen an verlinkten Seiten
Kamelbeiträge
Logbücher
Spezialseiten
Seiteninformationen