xref: /plugin/extranet/DOKU_DE (revision ef5bb1f3884025c3556b3c46e33332ca386a73a6)
1*ef5bb1f3SLORTET====== Extranet Plugin ======
2*ef5bb1f3SLORTET
3*ef5bb1f3SLORTET---- plugin ----
4*ef5bb1f3SLORTETdescription: Beschränkt Seiten, Medien und Aktionen für Extranet-Besucher
5*ef5bb1f3SLORTETauthor     : Valentin LORTET
6*ef5bb1f3SLORTETemail      : contact@valentinlortet.fr
7*ef5bb1f3SLORTETtype       : Action, Syntax, Helper
8*ef5bb1f3SLORTETlastupdate : 2026-03-13
9*ef5bb1f3SLORTETcompatible : Librarian
10*ef5bb1f3SLORTETdepends    : prosemirror
11*ef5bb1f3SLORTETconflicts  :
12*ef5bb1f3SLORTETsimilar    :
13*ef5bb1f3SLORTETtags       : Access, Extranet, Intranet, Proxy, Security, Helper
14*ef5bb1f3SLORTET
15*ef5bb1f3SLORTETdownloadurl: https://github.com/Lortet/dokuwiki-plugin-extranet/zipball/master
16*ef5bb1f3SLORTETbugtracker : https://github.com/Lortet/dokuwiki-plugin-extranet/issues
17*ef5bb1f3SLORTETsourcerepo : https://github.com/Lortet/dokuwiki-plugin-extranet/
18*ef5bb1f3SLORTETdonationurl:
19*ef5bb1f3SLORTETscreenshot_img :
20*ef5bb1f3SLORTET----
21*ef5bb1f3SLORTET
22*ef5bb1f3SLORTET[[fr:plugin:extranet|���� Français]] | [[plugin:extranet|���� English]] | ���� **Deutsch** | [[es:plugin:extranet|���� Español]]
23*ef5bb1f3SLORTET
24*ef5bb1f3SLORTET===== Installation =====
25*ef5bb1f3SLORTET
26*ef5bb1f3SLORTETDas Plugin über den [[plugin:extension|Erweiterungs-Manager]] mit der obigen URL installieren oder den Ordner nach ''lib/plugins/extranet'' kopieren.
27*ef5bb1f3SLORTET
28*ef5bb1f3SLORTET===== Beschreibung =====
29*ef5bb1f3SLORTET
30*ef5bb1f3SLORTETDas Plugin **extranet** kann:
31*ef5bb1f3SLORTET  * erkennen, ob eine Anfrage aus dem Extranet kommt, basierend auf einem konfigurierbaren Wert aus ''$_SERVER'';
32*ef5bb1f3SLORTET  * die Anzeige von Seiten und Mediendateien einschränken;
33*ef5bb1f3SLORTET  * ausgewählte DokuWiki-Aktionen für Extranet-Besucher deaktivieren;
34*ef5bb1f3SLORTET  * globale Regeln über Filter anwenden;
35*ef5bb1f3SLORTET  * seitenbezogene Ausnahmen mit ''~~NOEXTRANET~~'' und ''~~EXTRANET~~'' hinzufügen;
36*ef5bb1f3SLORTET  * sich in ProseMirror integrieren, damit diese Makros im WYSIWYG-Modus erhalten bleiben.
37*ef5bb1f3SLORTET
38*ef5bb1f3SLORTETDas Plugin eignet sich für die Trennung zwischen Intranet und Extranet. Es ergänzt ACLs, ersetzt aber keine echte Zugriffskontrolle.
39*ef5bb1f3SLORTET
40*ef5bb1f3SLORTET===== Einstellungen =====
41*ef5bb1f3SLORTET
42*ef5bb1f3SLORTET^ Name ^ Beschreibung ^ Standardwert ^
43*ef5bb1f3SLORTET| 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. | '''' |
44*ef5bb1f3SLORTET| extranet_match_list | Durch Kommas getrennte Liste von Werten, die als Extranet gelten. | '''' |
45*ef5bb1f3SLORTET| extranet_match_regex | Regex zur Erkennung einer Extranet-Anfrage anhand des konfigurierten Werts. | '''' |
46*ef5bb1f3SLORTET| default_policy | Standardrichtlinie: ''allow'', ''block'', ''force_allow'' oder ''force_block''. | ''allow'' |
47*ef5bb1f3SLORTET| filter_list | Liste von Seiten- oder Medien-IDs, auf die die Richtlinie angewendet wird. Unterstützt exakte IDs, Namensraum-Präfixe mit '':'', und Platzhalter ''*''. | '''' |
48*ef5bb1f3SLORTET| filter_regex | Zusätzliche Regex zum Ansprechen von Seiten oder Mediendateien. | '''' |
49*ef5bb1f3SLORTET| hide_files | Behandlung eingeschränkter Mediendateien: ''all'', ''except_pageicons'' oder ''none''. | ''none'' |
50*ef5bb1f3SLORTET| 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'' |
51*ef5bb1f3SLORTET| restricted_disable_actions | Zusätzliche Aktionen, die nur deaktiviert werden, wenn die aktuelle Seite eingeschränkt ist. | '''' |
52*ef5bb1f3SLORTET| preserve_first_title | Erste Überschrift beibehalten, wenn eine Seite ausgeblendet wird. | ''true'' |
53*ef5bb1f3SLORTET| message_prefix | Präfix vor der Einschränkungsmeldung. | '''' |
54*ef5bb1f3SLORTET| message_suffix | Suffix nach der Einschränkungsmeldung. | '''' |
55*ef5bb1f3SLORTET
56*ef5bb1f3SLORTET===== Kompatibilität =====
57*ef5bb1f3SLORTET
58*ef5bb1f3SLORTETDie folgenden alten Konfigurationsschlüssel werden weiterhin akzeptiert:
59*ef5bb1f3SLORTET  * ''server_ip_key''
60*ef5bb1f3SLORTET  * ''extranet_ip_list''
61*ef5bb1f3SLORTET  * ''extranet_ip_regex''
62*ef5bb1f3SLORTET
63*ef5bb1f3SLORTETBevorzugt werden sollten jedoch die neuen Namen:
64*ef5bb1f3SLORTET  * ''request_match_key''
65*ef5bb1f3SLORTET  * ''extranet_match_list''
66*ef5bb1f3SLORTET  * ''extranet_match_regex''
67*ef5bb1f3SLORTET
68*ef5bb1f3SLORTET===== Verwendung =====
69*ef5bb1f3SLORTET
70*ef5bb1f3SLORTETEs stehen zwei Makros zur Verfügung:
71*ef5bb1f3SLORTET  * ''~~NOEXTRANET~~'' : sperrt die Seite aus dem Extranet, wenn die Richtlinie dies zulässt;
72*ef5bb1f3SLORTET  * ''~~EXTRANET~~'' : erlaubt die Seite aus dem Extranet, wenn die Richtlinie dies zulässt.
73*ef5bb1f3SLORTET
74*ef5bb1f3SLORTETVerhalten je nach ''default_policy'':
75*ef5bb1f3SLORTET  * ''allow'' : alles ist erlaubt, außer gefilterten Seiten oder Seiten mit ''~~NOEXTRANET~~'';
76*ef5bb1f3SLORTET  * ''block'' : alles ist gesperrt, außer gefilterten Seiten oder Seiten mit ''~~EXTRANET~~'';
77*ef5bb1f3SLORTET  * ''force_allow'' : nur Filterregeln gelten, ''~~NOEXTRANET~~'' wird ignoriert;
78*ef5bb1f3SLORTET  * ''force_block'' : nur Filterregeln gelten, ''~~EXTRANET~~'' wird ignoriert.
79*ef5bb1f3SLORTET
80*ef5bb1f3SLORTET===== Beispiele =====
81*ef5bb1f3SLORTET
82*ef5bb1f3SLORTETErkennung über direkte IP:
83*ef5bb1f3SLORTET  * ''request_match_key = REMOTE_ADDR''
84*ef5bb1f3SLORTET  * ''extranet_match_regex = /^10\.100\./''
85*ef5bb1f3SLORTET
86*ef5bb1f3SLORTETErkennung über Proxy-Header:
87*ef5bb1f3SLORTET  * ''request_match_key = HTTP_X_NETWORK_ZONE''
88*ef5bb1f3SLORTET  * ''extranet_match_list = extranet''
89*ef5bb1f3SLORTET
90*ef5bb1f3SLORTETErkennung über den Namen des Upstream-Hosts:
91*ef5bb1f3SLORTET  * ''request_match_key = HTTP_X_UPSTREAM_HOST''
92*ef5bb1f3SLORTET  * ''extranet_match_regex = /^frontend-ext-/''
93*ef5bb1f3SLORTET
94*ef5bb1f3SLORTET===== Helper-API =====
95*ef5bb1f3SLORTET
96*ef5bb1f3SLORTETHelper laden:
97*ef5bb1f3SLORTET''$extranet = plugin_load('helper', 'extranet');''
98*ef5bb1f3SLORTET
99*ef5bb1f3SLORTET==== Hauptmethoden ====
100*ef5bb1f3SLORTET
101*ef5bb1f3SLORTET^ Methode ^ Seit ^ Beschreibung ^
102*ef5bb1f3SLORTET| ''getDefaultPolicy()'' | ''2026-03-13'' | Gibt die effektive Standardrichtlinie zurück. |
103*ef5bb1f3SLORTET| ''getRequestMatchKey()'' | ''2026-03-13'' | Gibt den für die Erkennung verwendeten ''$_SERVER''-Schlüssel zurück. |
104*ef5bb1f3SLORTET| ''getExtranetMatchList()'' | ''2026-03-13'' | Gibt die Liste der als Extranet behandelten Werte zurück. |
105*ef5bb1f3SLORTET| ''getExtranetMatchRegex()'' | ''2026-03-13'' | Gibt die Extranet-Erkennungs-Regex zurück. |
106*ef5bb1f3SLORTET| ''isExtranetRequest()'' | ''2026-03-13'' | Prüft, ob die aktuelle Anfrage als Extranet behandelt wird. |
107*ef5bb1f3SLORTET| ''isPageVisibleFromExtranet($id, $content = null)'' | ''2026-03-13'' | Prüft, ob eine Seite aus dem Extranet sichtbar ist. |
108*ef5bb1f3SLORTET| ''isMediaVisibleFromExtranet($mediaID)'' | ''2026-03-13'' | Prüft, ob eine Mediendatei aus dem Extranet sichtbar ist. |
109*ef5bb1f3SLORTET| ''isPageAllowed($id, $content = null)'' | ''2026-03-13'' | Prüft, ob eine Seite im aktuellen Kontext erlaubt ist. |
110*ef5bb1f3SLORTET| ''isMediaAllowed($mediaID)'' | ''2026-03-13'' | Prüft, ob eine Mediendatei im aktuellen Kontext erlaubt ist. |
111*ef5bb1f3SLORTET| ''parseRuleList($raw)'' | ''2026-03-13'' | Wandelt eine Regelkonfiguration in ein nutzbares Array um. |
112*ef5bb1f3SLORTET| ''idMatchesRule($id, $rule)'' | ''2026-03-13'' | Prüft eine ID gegen eine exakte Regel, einen Namensraum, einen Platzhalter oder eine Regex. |
113*ef5bb1f3SLORTET
114*ef5bb1f3SLORTET===== Funktionsweise =====
115*ef5bb1f3SLORTET
116*ef5bb1f3SLORTETDie Extranet-Erkennung basiert auf einem aus ''$_SERVER'' gelesenen Wert:
117*ef5bb1f3SLORTET  * der vollständige Rohwert wird geprüft;
118*ef5bb1f3SLORTET  * wenn er Kommata enthält, wird auch jedes einzelne Element geprüft.
119*ef5bb1f3SLORTET
120*ef5bb1f3SLORTETDamit lassen sich abdecken:
121*ef5bb1f3SLORTET  * eine direkte IP;
122*ef5bb1f3SLORTET  * ein Header im Stil von ''X-Forwarded-For'';
123*ef5bb1f3SLORTET  * ein vom Proxy injizierter Netzwerk-Marker;
124*ef5bb1f3SLORTET  * ein Upstream- oder Frontend-Hostname.
125*ef5bb1f3SLORTET
126*ef5bb1f3SLORTETWenn eine Seite eingeschränkt ist:
127*ef5bb1f3SLORTET  * wird der Cache zwischen Intranet und Extranet getrennt;
128*ef5bb1f3SLORTET  * wird der Wiki-Inhalt durch eine konfigurierbare Meldung ersetzt;
129*ef5bb1f3SLORTET  * kann die erste Überschrift erhalten bleiben, wenn ''preserve_first_title'' aktiviert ist.
130*ef5bb1f3SLORTET
131*ef5bb1f3SLORTETWenn eine Mediendatei eingeschränkt ist und ''hide_files'' nicht ''none'' ist, liefert das Plugin ein spezielles Bild statt der echten Datei aus.
132*ef5bb1f3SLORTET
133*ef5bb1f3SLORTET===== Hinweise =====
134*ef5bb1f3SLORTET
135*ef5bb1f3SLORTET  * Das Plugin ist kein Ersatz für ACLs.
136*ef5bb1f3SLORTET  * 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.
137