====== Extranet Plugin ====== ---- plugin ---- description: Beschränkt Seiten, Medien und Aktionen für Extranet-Besucher author : Valentin LORTET email : contact@valentinlortet.fr type : Action, Syntax, Helper lastupdate : 2026-03-13 compatible : Librarian depends : prosemirror conflicts : similar : tags : Access, Extranet, Intranet, Proxy, Security, Helper downloadurl: https://github.com/Lortet/dokuwiki-plugin-extranet/zipball/master bugtracker : https://github.com/Lortet/dokuwiki-plugin-extranet/issues sourcerepo : https://github.com/Lortet/dokuwiki-plugin-extranet/ donationurl: screenshot_img : ---- [[fr:plugin:extranet|🇫🇷 Français]] | [[plugin:extranet|🇬🇧 English]] | 🇩🇪 **Deutsch** | [[es:plugin:extranet|🇪🇸 Español]] ===== Installation ===== Das Plugin über den [[plugin:extension|Erweiterungs-Manager]] mit der obigen URL installieren oder den Ordner nach ''lib/plugins/extranet'' kopieren. ===== Beschreibung ===== Das Plugin **extranet** kann: * erkennen, ob eine Anfrage aus dem Extranet kommt, basierend auf einem konfigurierbaren Wert aus ''$_SERVER''; * die Anzeige von Seiten und Mediendateien einschränken; * ausgewählte DokuWiki-Aktionen für Extranet-Besucher deaktivieren; * globale Regeln über Filter anwenden; * seitenbezogene Ausnahmen mit ''~~NOEXTRANET~~'' und ''~~EXTRANET~~'' hinzufügen; * sich in ProseMirror integrieren, damit diese Makros im WYSIWYG-Modus erhalten bleiben. Das Plugin eignet sich für die Trennung zwischen Intranet und Extranet. Es ergänzt ACLs, ersetzt aber keine echte Zugriffskontrolle. ===== Einstellungen ===== ^ Name ^ Beschreibung ^ Standardwert ^ | request_match_key | ''$_SERVER''-Schlüssel, mit dem festgestellt wird, ob die Anfrage aus dem Extranet kommt. Kann ''REMOTE_ADDR'' oder ein ''HTTP_*''-Schlüssel sein. | '''' | | extranet_match_list | Durch Kommas getrennte Liste von Werten, die als Extranet gelten. | '''' | | extranet_match_regex | Regex zur Erkennung einer Extranet-Anfrage anhand des konfigurierten Werts. | '''' | | default_policy | Standardrichtlinie: ''allow'', ''block'', ''force_allow'' oder ''force_block''. | ''allow'' | | filter_list | Liste von Seiten- oder Medien-IDs, auf die die Richtlinie angewendet wird. Unterstützt exakte IDs, Namensraum-Präfixe mit '':'', und Platzhalter ''*''. | '''' | | filter_regex | Zusätzliche Regex zum Ansprechen von Seiten oder Mediendateien. | '''' | | hide_files | Behandlung eingeschränkter Mediendateien: ''all'', ''except_pageicons'' oder ''none''. | ''none'' | | disable_actions | DokuWiki-Aktionen, die für Extranet-Besucher deaktiviert werden. | ''admin,edit,preview,save,revisions,diff,export_raw,export_xhtml,export_xhtmlbody,permalink,register'' | | restricted_disable_actions | Zusätzliche Aktionen, die nur deaktiviert werden, wenn die aktuelle Seite eingeschränkt ist. | '''' | | preserve_first_title | Erste Überschrift beibehalten, wenn eine Seite ausgeblendet wird. | ''true'' | | message_prefix | Präfix vor der Einschränkungsmeldung. | '''' | | message_suffix | Suffix nach der Einschränkungsmeldung. | '''' | ===== Kompatibilität ===== Die folgenden alten Konfigurationsschlüssel werden weiterhin akzeptiert: * ''server_ip_key'' * ''extranet_ip_list'' * ''extranet_ip_regex'' Bevorzugt werden sollten jedoch die neuen Namen: * ''request_match_key'' * ''extranet_match_list'' * ''extranet_match_regex'' ===== Verwendung ===== Es stehen zwei Makros zur Verfügung: * ''~~NOEXTRANET~~'' : sperrt die Seite aus dem Extranet, wenn die Richtlinie dies zulässt; * ''~~EXTRANET~~'' : erlaubt die Seite aus dem Extranet, wenn die Richtlinie dies zulässt. Verhalten je nach ''default_policy'': * ''allow'' : alles ist erlaubt, außer gefilterten Seiten oder Seiten mit ''~~NOEXTRANET~~''; * ''block'' : alles ist gesperrt, außer gefilterten Seiten oder Seiten mit ''~~EXTRANET~~''; * ''force_allow'' : nur Filterregeln gelten, ''~~NOEXTRANET~~'' wird ignoriert; * ''force_block'' : nur Filterregeln gelten, ''~~EXTRANET~~'' wird ignoriert. ===== Beispiele ===== Erkennung über direkte IP: * ''request_match_key = REMOTE_ADDR'' * ''extranet_match_regex = /^10\.100\./'' Erkennung über Proxy-Header: * ''request_match_key = HTTP_X_NETWORK_ZONE'' * ''extranet_match_list = extranet'' Erkennung über den Namen des Upstream-Hosts: * ''request_match_key = HTTP_X_UPSTREAM_HOST'' * ''extranet_match_regex = /^frontend-ext-/'' ===== Helper-API ===== Helper laden: ''$extranet = plugin_load('helper', 'extranet');'' ==== Hauptmethoden ==== ^ Methode ^ Seit ^ Beschreibung ^ | ''getDefaultPolicy()'' | ''2026-03-13'' | Gibt die effektive Standardrichtlinie zurück. | | ''getRequestMatchKey()'' | ''2026-03-13'' | Gibt den für die Erkennung verwendeten ''$_SERVER''-Schlüssel zurück. | | ''getExtranetMatchList()'' | ''2026-03-13'' | Gibt die Liste der als Extranet behandelten Werte zurück. | | ''getExtranetMatchRegex()'' | ''2026-03-13'' | Gibt die Extranet-Erkennungs-Regex zurück. | | ''isExtranetRequest()'' | ''2026-03-13'' | Prüft, ob die aktuelle Anfrage als Extranet behandelt wird. | | ''isPageVisibleFromExtranet($id, $content = null)'' | ''2026-03-13'' | Prüft, ob eine Seite aus dem Extranet sichtbar ist. | | ''isMediaVisibleFromExtranet($mediaID)'' | ''2026-03-13'' | Prüft, ob eine Mediendatei aus dem Extranet sichtbar ist. | | ''isPageAllowed($id, $content = null)'' | ''2026-03-13'' | Prüft, ob eine Seite im aktuellen Kontext erlaubt ist. | | ''isMediaAllowed($mediaID)'' | ''2026-03-13'' | Prüft, ob eine Mediendatei im aktuellen Kontext erlaubt ist. | | ''parseRuleList($raw)'' | ''2026-03-13'' | Wandelt eine Regelkonfiguration in ein nutzbares Array um. | | ''idMatchesRule($id, $rule)'' | ''2026-03-13'' | Prüft eine ID gegen eine exakte Regel, einen Namensraum, einen Platzhalter oder eine Regex. | ===== Funktionsweise ===== Die Extranet-Erkennung basiert auf einem aus ''$_SERVER'' gelesenen Wert: * der vollständige Rohwert wird geprüft; * wenn er Kommata enthält, wird auch jedes einzelne Element geprüft. Damit lassen sich abdecken: * eine direkte IP; * ein Header im Stil von ''X-Forwarded-For''; * ein vom Proxy injizierter Netzwerk-Marker; * ein Upstream- oder Frontend-Hostname. Wenn eine Seite eingeschränkt ist: * wird der Cache zwischen Intranet und Extranet getrennt; * wird der Wiki-Inhalt durch eine konfigurierbare Meldung ersetzt; * kann die erste Überschrift erhalten bleiben, wenn ''preserve_first_title'' aktiviert ist. Wenn eine Mediendatei eingeschränkt ist und ''hide_files'' nicht ''none'' ist, liefert das Plugin ein spezielles Bild statt der echten Datei aus. ===== Hinweise ===== * Das Plugin ist kein Ersatz für ACLs. * Die Zuverlässigkeit hängt vom Request-Marker ab, den die Web-Infrastruktur liefert. Ein nicht vertrauenswürdiger oder fälschbarer Header macht die Erkennung unsicher.