Sie befinden sich hier: start » de » Interne Dokumentation » DokuWiki-Erweiterungen (WvdS) » Rollen und Berechtigungen » Rollenmatrix

Rollenmatrix

Die vollständige Aufstellung dessen, was jede Rolle dieses Wikis erlaubt und was sie nicht erlaubt, Ebene für Ebene. Diese Seite ist die eine Quelle für Berechtigungswerte; alle anderen Seiten verweisen hierher, statt Werte zu wiederholen.

Geltungsbereich

Ebene Vergibt Gespeichert in Ausgewertet von
1 DokuWiki-ACL Zahlen 0–255 je Seite oder Namensraum conf/acl.auth.php DokuWiki-Kern
2 Sitzungsnachweis AUTHENTICATED, MAIL_OTP, TOTP, MFA_ANY conf/wkidentity-policy.json wkidentity
3 Projektrolle none, reader, contributor, maintainer, admin Gruppen in der Benutzerverwaltung wkdocore
4 Komponentenstufen je Komponente verschieden ACL bzw. eigene Richtliniendatei die jeweilige Komponente

Die Ebenen werden in dieser Reihenfolge gefragt, und jede darf nur noch abweisen. Eine Rolle auf Ebene 3 kann nicht erteilen, was Ebene 1 verweigert hat.

Ebene 1: Die DokuWiki-ACL

Die Grundleiter. Sie gilt für jede Seite und jeden Namensraum und ist die einzige Ebene, die auch ohne jede Komponente dieses Hauses arbeitet.

Die Leiter

Wert Name Erlaubt Erlaubt nicht
0 Kein Zugriff nichts; die Seite verhält sich, als gäbe es sie nicht jeden Lesezugriff, auch auf Anhänge und Feeds
1 Lesen Seite ansehen, Verlauf und Unterschiede, Export, Abonnement jede Änderung, auch das Anlegen einer Unterseite
2 Bearbeiten zusätzlich: bestehende Seiten ändern, Entwürfe, Zurückrollen neue Seiten anlegen, Dateien hochladen
4 Anlegen zusätzlich: neue Seiten im Namensraum anlegen Dateien hochladen, Dateien löschen
8 Hochladen zusätzlich: Dateien in den Medienbereich legen hochgeladene Dateien wieder löschen
16 Löschen zusätzlich: Dateien im Medienbereich löschen Konfiguration, Benutzerverwaltung, Erweiterungen
255 Administration alles, unter Umgehung sämtlicher ACL-Regeln
Die Werte 4, 8 und 16 gelten nur für Namensraum-Regeln. Auf einer einzelnen Seite ist 2 der höchste sinnvolle Wert; höhere Zahlen auf einer Seitenregel wirken wie 2.

Wie ein Wert zustande kommt

DokuWiki wertet die spezifischste Regel aus, nicht die höchste. Reihenfolge:

  1. Regel für dieses Konto auf dieser Seite.
  2. Regel für eine Gruppe dieses Kontos auf dieser Seite — bei mehreren gewinnt die höchste.
  3. Dieselben beiden Schritte im nächsthöheren Namensraum, aufwärts bis zur Wurzel.
  4. Trifft nichts zu: kein Zugriff.

Eine Kontoregel schlägt jede Gruppenregel derselben Ebene, auch wenn sie niedriger ist. So sperrt man ein einzelnes Konto aus einem Bereich aus, den seine Gruppe offen hat.

Gruppen dieses Wikis

Gruppe Wer darin ist Bedeutung
@ALL jede Besucherin und jeder Besucher, auch ohne Anmeldung der Grundwert; steht er auf 0, ist der Bereich nicht öffentlich
@user jedes angemeldete Konto „angemeldet genügt„
@admin die Superadministration ($conf['superuser']) umgeht Ebene 1 vollständig
@wvds redaktionell Mitwirkende Schreibrechte auf den Sprach- und Inhaltsnamensräumen
@wvdse technische Betreuung der Quellcode-Mounts Vollzugriff auf die eingehängten Repositorien
@dwdo_<projekt>_readers Leserinnen und Leser eines Projekts siehe Ebene 3
@dwdo_<projekt>_contributors Mitwirkende eines Projekts siehe Ebene 3
@dwdo_<projekt>_maintainers Betreuung eines Projekts siehe Ebene 3

Ebene 2: Der Sitzungsnachweis

Diese Ebene fragt nicht, wer Sie sind, sondern wie gut diese eine Sitzung das belegt hat. Sie ist der häufigste Grund dafür, angemeldet zu sein und trotzdem abgewiesen zu werden.

Stufe Bedeutet Erreicht durch Reicht nicht für
AUTHENTICATED angemeldet, Passwort genügt gewöhnliche Anmeldung Bereiche mit Faktorpflicht
MAIL_OTP Einmalcode per E-Mail bestätigt Code aus der E-Mail eingegeben Bereiche, die ausdrücklich TOTP verlangen
TOTP Authenticator-App bestätigt sechsstelliger Code aus der App
MFA_ANY irgendein zweiter Faktor bestätigt MAIL_OTP oder TOTP

Woran eine Anforderung hängen kann

Eine Anforderung wird an einen Geltungsbereich gebunden. Möglich sind acht Arten:

  • namespace — alle Seiten unter einem Präfix.
  • plugin, module, view — eine Komponente, ein Modul darin, eine einzelne Ansicht.
  • command, adminAction — ein Befehl bzw. eine Verwaltungshandlung.
  • group, user — an die anfragende Person gebunden statt an das Ziel: „diese Gruppe braucht immer TOTP“.

Treffen mehrere zu, gilt die höchste. Eine Sitzung, die MAIL_OTP nachgewiesen hat, erfüllt MFA_ANY und MAIL_OTP, nicht aber TOTP.

Die drei älteren Listen

Liste Wirkung Blockiert?
required_users Profilseite und ein Hinweisband mahnen zur Einrichtung nein, nur Hinweis
email_users dürfen den E-Mail-Code benutzen, auch wenn er allgemein aus ist nein, erweitert nur
required_namespaces Lesen und Schreiben werden verweigert, solange kein Faktor eingerichtet ist ja

email_users kann eine Methode nur hinzufügen, niemals wegnehmen. Eine fehlende oder unlesbare Richtliniendatei kann daher niemand aussperren.

Ebene 3: Die Projektrolle

Innerhalb eines Projekts gilt eine eigene, geordnete Leiter. Sie steuert, welche Arbeitsbereiche in der Navigation erscheinen und wer die Mitgliederliste eines Projekts ändern darf.

Rolle Stufe Erlaubt Erlaubt nicht
none 0 nichts jeden Projektbereich
reader 10 Projektbereiche und Arbeitsbereiche ansehen Inhalte ändern, Mitglieder sehen
contributor 20 zusätzlich: Inhalte des Projekts anlegen und ändern Mitglieder verwalten, Einstellungen ändern
maintainer 30 zusätzlich: Mitglieder verwalten, Projekteinstellungen Maintainer ernennen, globale Konfiguration
admin 40 alles
admin ist die globale Superadministration des Wikis, keine projektbezogene Rolle. Ein projektbezogenes Administrationsrecht gibt es nicht: Die höchste Rolle, die man in einem Projekt haben kann, ist maintainer. Wer Maintainer ernennt, ist die globale Administration.

Woher die Rolle kommt

Zuerst der Gruppenüberzug, dann die ACL. Der erste Treffer gewinnt:

  1. Superadministration → admin.
  2. Mitglied in @dwdo_<projekt>_maintainersmaintainer.
  3. Mitglied in @dwdo_<projekt>_contributorscontributor.
  4. Mitglied in @dwdo_<projekt>_readersreader.
  5. Sonst: ACL-Wert auf der Projektwurzel übersetzen — ab 16 → maintainer, ab 2 → contributor, ab 1 → reader, sonst none.

Das Präfix dwdo_ ist einstellbar (roleprefix). Die Rolle wird immer an der Projektwurzel bestimmt, nie an der Seite, die Sie gerade ansehen — sie ist eine Eigenschaft des Projekts, nicht des Aufrufs.

Schritt 5 ist der Grund, warum ein Projekt ganz ohne Überzugsgruppen funktioniert: Es läuft dann rein über die Namensraum-ACL. Es ist zugleich der Grund, warum ein ACL-Wert von 16 auf einer Projektwurzel jemanden zum Maintainer macht, ohne dass eine Gruppe das sichtbar sagt.

Was die Navigation verbirgt

Arbeitsbereiche, für die die Rolle nicht genügt, werden in der Navigationsleiste ausgeblendet. Das ist eine Anzeigeentscheidung, keine Absicherung: Die Zielseite prüft ihre Berechtigung selbst. Ein verschwundener Menüpunkt bedeutet daher „hier ist für Sie nichts zu holen„, nicht „hier liegt etwas Verstecktes“.

Ebene 4: Die Komponentenstufen

Einzelne Komponenten führen zusätzlich eine eigene Leiter, weil ihr Gegenstand keine Wiki-Seite ist.

Eingehängte Quellcode-Repositorien

Vier Sprossen einer Leiter, ausgedrückt in denselben Zahlen wie Ebene 1 — es gibt also keine zweite Berechtigungsverwaltung, sondern eine ACL-Zeile je Gruppe auf dem Einhängepunkt.

Fähigkeit ACL-Wert Erlaubt Erlaubt nicht
view 1 im Wiki blättern und ansehen klonen, herunterladen
fetch 2 zusätzlich: klonen und als Archiv laden eigene Änderungen ablegen
propose 4 zusätzlich: unter eigenem Ref-Präfix ablegen in fremde Zweige schreiben
write 8 zusätzlich: überall schreiben, wo das Repositorium es zulässt Einhängepunkte verwalten

Für neue Einhängepunkte gibt es vier Voreinstellungen:

Stufe Wer sieht es Wer schreibt
private niemand außer der technischen Betreuung technische Betreuung
readonly jedes angemeldete Konto (fetch) technische Betreuung
public alle, auch ohne Anmeldung (fetch) technische Betreuung
team die Leser des Projekts (view) Mitwirkende fetch, Maintainer write

team ist die einzige Stufe, deren Gruppen vom Projekt abhängen. Sie ist die richtige Wahl, sobald mehrere geschlossene Projekte nebeneinander bestehen: Die anderen drei kennen nur „niemand„, „alle Angemeldeten“ und „alle„.

SQLite Data Studio

Eine Fähigkeitsmatrix statt einer Leiter, weil die sechs Fähigkeiten wirklich unabhängig sind.

Fähigkeit Erlaubt
use das Studio überhaupt öffnen
query lesende Abfragen ausführen
write Daten ändern
design Schema ändern
export Ergebnisse ausleiten
admin Verbindungen und die Matrix selbst verwalten

Die Auflösung, erster Treffer gewinnt:

  1. Superadministration → immer erlaubt.
  2. Steht dbadmin_readonly auf 1, sind write und design verweigert — auch dort, wo die Matrix sie erteilt.
  3. Regel für die Verbindung schlägt globale Regel; innerhalb einer Ebene schlägt eine Kontoregel jede Gruppenregel. Gruppenregeln derselben Ebene werden vereinigt.
  4. Keine passende Regel → verweigert.

Handlungen mit Faktorpflicht

Mehrere Komponenten verlangen für einzelne Handlungen zusätzlich einen Sitzungsnachweis nach Ebene 2, unabhängig davon, welche Berechtigung das Konto hat.

Komponente Handlung Verlangt
Tresor read AUTHENTICATED
Tresor create, rotate, delete, rekey MFA_ANY
SQLite Data Studio code-write, connection-admin, db-destructive MFA_ANY
Ressourcen create, update AUTHENTICATED
Ressourcen delete MFA_ANY
Azure-DevOps-Anbindung secret-write, remove MFA_ANY
Quellcode-Einhängepunkte token-issue AUTHENTICATED
Quellcode-Einhängepunkte mount-admin MFA_ANY
Blog content-admin MFA_ANY

Wer pflegt was

Ebene Bildschirm Wer darf dorthin
1 ACL ?do=adminZugriffsverwaltung Superadministration
1 Gruppen eines Kontos ?do=adminBenutzerverwaltung Superadministration
2 Sitzungsnachweis ?do=adminIdentität Superadministration
3 Projektmitglieder Projektseite → Mitglieder Maintainer des Projekts
4 Einhängestufen ?do=adminQuellcode-Einhängepunkte Superadministration
4 Fähigkeitsmatrix ?do=adminSQLite Data StudioBerechtigungen wer admin im Studio hält

Der Mitgliederbildschirm eines Projekts ist der einzige, den keine globale Administration braucht. Er ist deshalb der Zielort, an den eine Zugriffsanfrage zu einem Projekt geleitet wird — siehe Wohin eine Anfrage geht.

Der Vertrag für Komponenten

Eine eigene Komponente hängt ihre Absage an dieselbe Infrastruktur, statt einen eigenen Satz zu schreiben. Zwei Aufrufe genügen.

Eine Absage wegen fehlender Berechtigung:

$req = plugin_load('helper', 'wkrequest');
if (is_object($req) && method_exists($req, 'accessPanel')) {
    echo $req->accessPanel([
        'resourceLabel' => $titel,
        'required'      => $req->permissionLabel(AUTH_READ),
        'current'       => $req->currentPermissionLabel($seitenId),
        'draft'         => [
            'type'     => 'ACCESS_REQUEST',
            'owner'    => 'meinplugin',
            'handler'  => 'meinplugin:einstellungen',
            'resource' => $seitenId,
        ],
        'alternatives'  => [['label' => $andererWeg, 'href' => $url]],
    ]);
}

Eine Absage wegen fehlendem zweitem Faktor:

echo $req->stepUpPanel([
    'requirement' => 'MFA_ANY',
    'origin'      => 'meinplugin:loeschen',
    'back'        => $zurueckUrl,
]);

Anmeldung, „meine offenen Anfragen“ und der Rückweg werden angehängt, ohne dass die aufrufende Stelle daran denken muss; jeder dieser Punkte meldet sich in der Lage, in die er nicht passt, selbst als nicht verfügbar und wird dann weggelassen.

Damit eine Anfrage bei der richtigen Stelle landet, meldet die Komponente ihren Verwaltungsbildschirm an:

$controller->register_hook('WKREQUEST_REGISTER_HANDLERS', 'BEFORE', $this, 'registerRequestHandlers');
// ...
$event->data['handlers'][] = [
    'owner' => 'meinplugin',
    'id'    => 'einstellungen',
    'label' => $this->getLang('menu'),
    'url'   => wl('', ['do' => 'admin', 'page' => 'meinplugin'], true, '&'),
    'types' => ['ACCESS_REQUEST', 'ADMIN_ACTION_REQUEST'],
];

Kennt eine Komponente den abgewiesenen Bereich genauer als der Kern, schärft sie die Tafel nach, statt eine zweite daneben zu zeichnen:

$controller->register_hook('WKREQUEST_REFINE_DENIED', 'BEFORE', $this, 'refineDeniedRequest');

$event->data trägt dann id, resourceLabel, required, current, facts, alternatives und draft. Zurückgegebene Werte werden einzeln übernommen; ein unbrauchbarer Wert wird verworfen und die allgemeine Antwort bleibt stehen.

Bekannte Lücken

Stellen, an denen das Modell heute weniger leistet, als der Rest dieser Seite nahelegt. Sie stehen hier, weil eine Lücke, die niemand benennt, wie ein Fehler des Lesers aussieht.

Lücke Folge Behelf
Meldungen nach einer versuchten Handlung sind weiterhin einzeilige Hinweise, keine Tafeln. Das betrifft unter anderem die Git-Ansicht, Pipelines, Arbeitsaufgaben und die Quelltextanzeige. Nach einem fehlgeschlagenen Klick steht dort „Sie dürfen das nicht„ ohne Anforderungsweg. Die Seite neu laden: Die verschlossene Seite trägt die Tafel.
Nur eine Anfrage, die ein Projekt benennt, findet ihre Zuständigen von selbst. Alles Übrige geht an die global eingestellte Adresse — und in dieser Installation ist keine gesetzt. Eine Anfrage ohne Projektbezug benachrichtigt niemanden. Sie ist gespeichert und im Eingang sichtbar, aber niemand erfährt davon. Eine Adresse unter notify_mail eintragen, oder den Eingang regelmäßig öffnen.
@wvds und @wvdse kommen in den ACL-Regeln vor, sind aber derzeit keinem Konto zugeordnet. Regeln, die nur diese Gruppen öffnen, öffnen für niemanden. Zuordnung in der Benutzerverwaltung prüfen.
Die Projektübersicht, die Ihre Rolle je Projekt auflistet, gibt es bisher nur auf Deutsch. Wer die Oberfläche in einer anderen Sprache benutzt, findet seine Rollen nur einzeln, auf jeder Projektseite. Projektübersicht

Verwandte Themen

de/wiki/dwe/permissions/matrix.txt · Zuletzt geändert: von 0.0.0.0