Benutzer:Markus Bärlocher/Namensraum

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Dieser Artikel betrifft die Wikimedia-Software.

Namensräume sind softwaremässig abgegrenzte Bereiche zur Speicherung von Daten. Genauer sind es Tabellen einer Datenbank. Die Datensätze sind die Artikel, Schlüsselfeld ist der Titel eines Artikels, Standard-Feld ist der Artikelinhalt, zusätzlich können weitere Felder definiert werden (Kapitel, Referenzen, etc).

Standard-Namensräume[Bearbeiten | Quelltext bearbeiten]

In der Wikimedia-Software gibt es folgende Standard-Namensräume:

Nr Namensraum Variable
0 (Artikel)
1 (Diskussion_Artikel)
2 Benutzer
3 Diskussion_Benutzer
4 Wikiname*
5 Diskussion_Wikiname*
6 Bild
7 Diskussion_Bild
8 MediaWiki
9 Diskussion_MediaWiki
10 Vorlage
11 Diskussion_Vorlage
12 Hilfe
13 Diskussion_Hilfe
14 Kategorie
15 Diskussion_Kategorie

Die Namensräume 4 und 5 heissen immer so, wie das jeweilige Wiki-Projekt. Bei Wikipedia also Wikipedia und Diskussion_Wikipedia.

Die Namensräume sind über die Nummer definiert. Die Bezeichnung des Namensraumes kann in ... frei gewählt werden.

Zusätzliche Namensräume in Wikipedia[Bearbeiten | Quelltext bearbeiten]

In Wikipedia gibt es folgende zusätzliche Namensräume:

Nr Namensraum Variable
101 Portal
102 Diskussion_Portal

Definition von Namensräumen[Bearbeiten | Quelltext bearbeiten]

Die Namensräume sind in ... definiert:

Zusätzliche Namensräume einrichten[Bearbeiten | Quelltext bearbeiten]

Zusätzliche Namensräume werden in der Datei Local settings.php eingerichtet. Dazu ist ein ftp-Zugang zum Server und eine entsprechende Berechtigung notwendig. In Wikipedia sind beispielsweise "Portal" "Diskussion_Portal definiert. Zugang zur Local settings.php von Wikipedia haben folgende Personen: ... .

Für die Definition zusätzlicher Namensräume gibt es zwei Verfahren:

zeilenweise[Bearbeiten | Quelltext bearbeiten]

Vorteil: ...

Beispiel:

$wgExtraNamespaces[100] = "Portal";
$wgExtraNamespaces[101] = "Diskussion_Portal";
$wgExtraNamespaces[102] = "Irgendwas";
$wgExtraNamespaces[103] = "Diskussion_Irgendwas";
$wgExtraNamespaces[104] = "Etwasanderes";
$wgExtraNamespaces[105] = "Diskussion_Etwasanderes";

Achtung: Semikolon nach jeder Zeile.

als Array[Bearbeiten | Quelltext bearbeiten]

Vorteil: ...

Beispiel:

$wgExtraNamespaces =
	array(100 => "Portal",
	      101 => "Diskussion_Portal",
	      102 => "Irgendwas",
	      103 => "Diskussion_Irgendwas",
	      104 => "Etwasanderes",
	      105 => "Diskussion_Etwasanderes");

Achtung: Komma nach jeder Zeile, Semikolon am Ende der letzten Zeile, und schliessende runde Klammer nicht vergessen.

Verwendung[Bearbeiten | Quelltext bearbeiten]

Jeder Namensraum kann einer eigenen Gruppe von Regeln unterliegen.

Inhalte[Bearbeiten | Quelltext bearbeiten]

Welche Inhalte in welche Namensräume gehören und wie diese auszusehen haben, kann in freier Vereinbarung festgelegt werden. Beispielsweise stehen im Namensraum "Hilfe" sinnvollerweise Artikel die bei der Arbeit im Wiki helfen, und Artikel über die Wikimedia-Software (wie dieser) stehen sinnvollerweise im Namensraum "Wikimedia". In Wikipedia ist beispielsweise auch festgelegt, wann ein Artikel im Artikel-Namensraum ein "guter Artikel" ist.

Aber auch der Artikel-Namensraum kann beliebig unterteilt oder erweitert werden. Damit könnten Inhalte gegliedert werden, beispielsweise könnten getrennte Namensräume angelegt werden für Schüler, Lehrer, Eltern, Schulorganisation, Unterrichtsmaterial.

Berechtigungen[Bearbeiten | Quelltext bearbeiten]

Die Berechtigungen, also wer was in welchem Namensraum darf, werden in der Datei "MediaWiki:Commons.js" definiert.

Standardmässig darf jeder Benutzer in jedem Namensraum:

Lesen read
Schreiben (Bearbeiten) edit
neue Artikel anlegen create
Artikel verschieben move

Die Berechtigungen können unterschiedlich zugeteilt werden, sowohl zu einzelnen Namensräumen, als auch zu einzelnen Benutzergruppen. Beispielsweise können standardmässig alle Benutzer (auch unangemeldete) Artikel lesen, bearbeiten oder neue Artikel anlegen, aber nur angemeldete Benutzer dürfen Artikel verschieben, und nur Administratoren dürfen Artikel löschen.

Benutzergruppen[Bearbeiten | Quelltext bearbeiten]

Standardmässig gibt es folgende Benutzergruppen:

nicht angemeldete IP's
Angemeldete Benutzer user
Administratoren sysop
Bürokraten bureaucrat

Zusätzliche Benutzergruppen einrichten[Bearbeiten | Quelltext bearbeiten]

Siehe das Beispiel #Vereinswiki und noch komplexer #Schulwiki.

Jede zusätzliche Benutzergruppe wird in der Datei "localsettings.php" so definiert:

$wgGroupPermissions['Lehrer'];
$wgGroupPermissions['Schüler'];
$wgGroupPermissions['Irgendeiner'];

Namensraumspezifische Rechte an Benutzergruppen vergeben[Bearbeiten | Quelltext bearbeiten]

Beispielsweise könnte man in einer Schule mit den Benutzergruppen "Schüler" und "Lehrer" und den Namensräumen "Lehrerzimmer" und Unterricht" folgende Rechte vergeben:

# Rechte für Unterrich (ns103)
$wgGroupPermissions['Schüler']['ns103_read'] = true;
$wgGroupPermissions['Schüler']['ns103_edit'] = true;
$wgGroupPermissions['Schüler']['ns103_create'] = true; 
$wgGroupPermissions['sysop']['ns103_delete'] = true;
# Rechte für Lehrerzimmer (ns105)
$wgGroupPermissions['Schüler']['ns105_*'] = false;     #Schüler dürfen nichts
$wgGroupPermissions['Lehrer']['ns105_read'] = true;
$wgGroupPermissions['Lehrer']['ns105_edit'] = true;
$wgGroupPermissions['Lehrer']['ns105_create'] = true;
$wgGroupPermissions['sysop']['ns105_delete'] = true;

Damit das funktioniert, muss eine Software-Erweiterung installiert werden [...]. Diese muss in der Datei "MediaWiki:Commons.js" freigeschaltet werden:

require_once( "extensions/NamespacePermissions.php" );

Diese Code Zeile muss nach ... und vor ... eingefügt werden.

Beispiel "Vereinswiki"[Bearbeiten | Quelltext bearbeiten]

Ein Verein möchte eine interaktive Website mit der Wikimedia-Software gestalten. Die Vereinsseite soll öffentlich und für alle lesbar sein. Die Inhalte sollen aber nur von Vereinsmitgliedern erstellt werden dürfen. Auf den Diskussionsseiten sollen aber auch Nicht-Vereinsmitglieder einen Kommentar schreiben dürfen, sollen sich aber dafür anmelden. Vorlagen sollen nur von Administratoren bearbeitet werden. Das gilt auch für die Vereinssatzung und die Gebührenordnung.

Dazu ist die Datei "Mediawiki:Commons.js" folgendermassen zu ergänzen:

# Benutzergruppe "Vereinsmitglied" einrichten
$wgGroupPermissions['Lehrer'];

# Administratoren dürfen Nutzern den Status "Vereinsmitglied" geben
$wgAddGroups['sysop'] = 'Vereinsmitglied';

# Rechte für nicht angemeldete Benutzer 
$wgGroupPermissions['...']['ns*_*'] = false;              #dürfen erst mal nirgends irgendwas
$wgGroupPermissions['...']['ns*_read'] = true;            #aber überall lesen

# Rechte für angemeldete Benutzer
$wgGroupPermissions['user']['ns2_edit'] = true;           #dürfen die Diskussionsseite editieren
$wgGroupPermissions['user']['ns4_edit'] = true;
...
<!-- oder einfacher: $wgGroupPermissions['...']['alle_Diskussionsseiten_edit'] = true; -->

# Rechte für Vereinsmitglieder
$wgGroupPermissions['Vereinsmitglied']['*_edit'] = true;  #darf erst mal überall editieren

# Spezialseiten in der Sidebar ausblenden
....
# Spezialseiten für angemeldete Benutzer einblenden
...


Beispiel "Schulwiki"[Bearbeiten | Quelltext bearbeiten]

Eine Schule will eine interaktive Website mit der Wikimedia-Software gestalten. Die Schulseite soll öffentlich und für alle lesbar sein. Die Inhalte sollen aber nur von angemeldeten Benutzern erstellt und editiert werden dürfen. Auf den Diskussionsseiten sollen aber auch Nicht-Angemeldete einen Kommentar schreiben dürfen. Schülern, Lehrern, und Eltern sollen einen eigenen Bereich erhalten, in dem zwar alle lesen, aber nur jeweils die Schüler, Lehrer, oder Eltern neue Artikel erstellen und editieren dürfen. Vorlagen sollen nur von Administratoren bearbeitet werden. Die Schulordnung soll nur vom Rektor verändert werden dürfen.

Alle Artikel über den Schulstoff kommen in den "Namensraum 0" und werden diskutiert im "Namensraum 1". Für die Lehrer, für die Schüler und für die Eltern werden zusätzliche Namensräume eingerichtet. Dazu muss der Systemadministrator über seinen ftp-Zugang die Datei "Local settings.php" folgendermassen ergänzen:

$wgExtraNamespaces =
	array(100 => "Schüler",
	      101 => "Diskussion_Schüler",
	      102 => "Lehrer",
	      103 => "Diskussion_Lehrer",
	      104 => "Eltern",
	      105 => "Diskussion_Eltern";
             )

Dann muss die Softwareerweiterung "NamespacePermissions" installiert werden [...].

Dann müssen zusätzliche Benutzergruppen definiert und Rechte vergeben werden. Dies geschieht in der Datei "MediaWiki:Commons.js":

Dazu ist die Datei "Mediawiki:Commons.js" folgendermassen zu ergänzen:

# Software-Erweiterung "NamespacePermissions" freischalten
require_once( "extensions/NamespacePermissions.php" );

# Benutzergruppen einrichten
$wgGroupPermissions['Schüler'];
$wgGroupPermissions['Lehrer'];
$wgGroupPermissions['Rektor'];

# Rektor und Bürokrat dürfen Nutzern einen neuen Status geben
$wgAddGroups['Rektor'] = array( 'Lehrer',
                                'Schüler',
                                'Eltern',
                                'sysop'
                              );
$wgAddGroups['bureaukrat'] = array( 'Lehrer',
                                    'Schüler',
                                    'Eltern',
                                    'sysop'
                                  );

# Rechte für nicht angemeldete Benutzer 
$wgGroupPermissions['...']['ns*_*'] = false;              #dürfen erst mal nirgends irgendwas
$wgGroupPermissions['...']['ns0_read'] = true;            #dürfen erst mal nirgends irgendwas
...

# Rechte für angemeldete Benutzer
$wgGroupPermissions['user']['ns1_edit'] = true;           #dürfen die Diskussionsseite editieren
$wgGroupPermissions['user']['ns3_edit'] = true;           #dürfen die BenutzerDiskussionsseite editieren
$wgGroupPermissions['user']['ns2_create'] = true;         #dürfen Benutzerseiten erstellen 
$wgGroupPermissions['user']['ns2_edit'] = true;           #dürfen Benutzerseiten editieren 
<!-- wie geht das, wenn sie nur die eigene Benutzerseite editieren dürfen? -->
...

# Rechte für Schüler im Namensraum "Schüler"
$wgGroupPermissions['Schüler']['ns100_edit'] = true;        #darf editieren
$wgGroupPermissions['Schüler']['ns101_edit'] = true;        #darf editieren
$wgGroupPermissions['Schüler']['ns100_create'] = true;      #darf editieren
$wgGroupPermissions['Schüler']['ns101_create'] = true;      #darf editieren

# Rechte für Lehrer im Namensraum "Lehrer"
$wgGroupPermissions['Lehrer']['ns102_edit'] = true;        #darf editieren
$wgGroupPermissions['Lehrer']['ns103_edit'] = true;        #darf editieren
$wgGroupPermissions['Lehrer']['ns102_create'] = true;      #darf erstellen
$wgGroupPermissions['Lehrer']['ns103_create'] = true;      #darf erstellen

# Rechte für Eltern im Namensraum "Eltern"
$wgGroupPermissions['Eltern']['ns104_edit'] = true;        #darf editieren
$wgGroupPermissions['Eltern']['ns105_edit'] = true;        #darf editieren
$wgGroupPermissions['Eltern']['ns104_create'] = true;      #darf erstellen
$wgGroupPermissions['Eltern']['ns105_create'] = true;      #darf erstellen

# Rechte für Rektor

# Spezialseiten in der Sidebar ausblenden
....
# Spezialseiten für angemeldete Benutzer einblenden
...

Geschützter Namensraum[Bearbeiten | Quelltext bearbeiten]

Die Wikimedia-Software ist nicht geeignet, absolut geschützte Namensräume zu erzeugen.

Dennoch gibt es gute Möglichkeiten, Inhalte vor Unbefugten zu verbergen. Wenn beispielsweise die Lehrer für die Notenkonferenz einen Namensraum "Geheim" möchten, zu dem ausser Lehrern niemand Zugang hat, dann wäre folgendes zu tun:

# geheimen Namensraum einichten
$wgExtraNamespaces[110] = "Geheim";
$wgExtraNamespaces[111] = "Diskussion_Geheim";

# Namensraum "Geheim" für alle sperren
$wgGroupPermissions['*']['ns110_*'] = false;
$wgGroupPermissions['*']['ns111_*'] = false;

# Namensraum "Geheim" nur für Mitglieder der Benutzergruppe "Lehrer" freigeben
$wgGroupPermissions['Lehrer']['ns110_read'] = true;
$wgGroupPermissions['Lehrer']['ns111_read'] = true;
$wgGroupPermissions['Lehrer']['ns110_edit'] = true;
$wgGroupPermissions['Lehrer']['ns111_edit'] = true;
$wgGroupPermissions['Lehrer']['ns110_create'] = true;
$wgGroupPermissions['Lehrer']['ns111_create'] = true;

# aber nur der Rektor und der Bürokrat dürfen löschen 
$wgGroupPermissions['Rektor']['ns110_delete'] = true;
$wgGroupPermissions['Rektor']['ns111_delete'] = true;
$wgGroupPermissions['Bürokrat']['ns110_delete'] = true;
$wgGroupPermissions['Bürokrat']['ns111_delete'] = true;

Über "Suchen" und "Spezial:alle_Seite" können die Artikel im Namensraum aber immer noch gefunden und gelesen werden.

Suche einschränken[Bearbeiten | Quelltext bearbeiten]

So wird die Suche im Namensraum "Geheim" unterbunden:

function powerSearch( &$request ) {
                global $wgUser;
                $arr = array();
                foreach( SearchEngine::searchableNamespaces() as $ns => $name ) {
                        if( $request->getCheck( 'ns' . $ns ) ) {
                                if ( $ns >= 100 ) {
                                    if ( $wgUser->isAllowed("ns{$ns}_read") ) {
                                        $arr[] = $ns;
                                    }
                                } else {
                                        $arr[] = $ns;
                                }
                        }
                }
                return $arr;
        }

Spezial:Alle_Seiten einschränken[Bearbeiten | Quelltext bearbeiten]

So wird der Zugriff über "Spezial:Alle_Seiten" auf den Namensraum "Geheim" unterbunden:

...

Sidebar ausblenden[Bearbeiten | Quelltext bearbeiten]

So wird "Spezialseiten" in der Sidebar für nicht angemeldete Benutzer ausgeblendet:

...

Benutzer zu einer Benutzergruppe zuordnen[Bearbeiten | Quelltext bearbeiten]

Damit nur der Rektor und der Bürokrat den Status "Lehrer" vergeben kann ist noch folgender Code notwendig:

# Bürokraten dürfen Nutzern jeden Status geben
$wgAddGroups['bureaucrat'] = array( 'Lehrer',
			   	    'bureaucrat',
				    'sysop'
			     );
$wgAddGroups['Rektor'] = array( 'Lehrer',
			   	'bureaucrat',
				'sysop'
			     );

Deutsche Hilfe-Seiten[Bearbeiten | Quelltext bearbeiten]

Englische Hilfe-Seiten[Bearbeiten | Quelltext bearbeiten]