Deep Research · Matrix Spec v1.18 / Room v12

Gäste reden. Berater moderieren. Admins konfigurieren.

Matrix kann Raumrechte sehr gut abbilden, aber nicht als klassisches globales RBAC-System. Die saubere Architektur ist: Produktrollen im Backend verwalten, Matrix-Räume serverseitig provisionieren und pro Raum passende m.room.power_levels setzen.

1. Zielbild: Produkt-Rollen bleiben führend

Matrix speichert Rechte im Raumzustand. Für ein Produkt mit Beratern, Admins und Gästen sollte Matrix deshalb nicht die einzige Quelle der Wahrheit sein. Das Produkt entscheidet, wer Berater/Admin/Gast ist; ein Provisioning-Service übersetzt das in Matrix-Accounts, Raum-Mitgliedschaften und Power Levels.

Produkt

Rollen & Zuweisungen

Backend/Identity Provider enthält: Nutzer ist Gast, Berater, Berater-Admin, Org-Admin oder Plattform-Owner. Außerdem: Welche Berater sind welchem Kunden-/Fallraum zugeordnet?

Provisioner

Matrix als ausführendes System

Ein Service-User oder Application Service erstellt Räume, lädt User ein, setzt Power Levels und korrigiert Drift. Der Browser darf keine Admin-Tokens haben.

Client

Web-Component als UX-Schicht

Die Web-Component blendet Funktionen aus, aber die echte Autorisierung liegt beim Homeserver und beim Produkt-Backend. UI allein ist keine Security Boundary.

Wichtig: Matrix Power Levels sind raumlokal. Ein User kann in Raum A Admin sein, in Raum B nur Gast und in Raum C gar kein Mitglied.

2. Empfohlenes Rollenmodell

Ich würde vier Produktrollen unterscheiden. Damit bleibt der normale Berater arbeitsfähig, ohne strukturelle oder sicherheitsrelevante Einstellungen zu besitzen.

ProduktrolleMatrix-RepräsentationDarfDarf nicht
Gast / Kunde
PL 0
Normaler Matrix-User, Mitglied nur in eigenen Räumen.Nachrichten, Dateien, Reaktionen, eigene Nachrichten löschen/redacten falls erlaubt.Räume erstellen, Gäste einladen, Raumname/Topic/Join Rules ändern, andere kicken/bannen, fremde Nachrichten löschen.
Berater
PL 50
Moderator in zugewiesenen Kundenräumen.Gäste einladen, Gäste entfernen, fremde Inhalte moderieren, optional Topic ändern.Power Levels ändern, Raum dauerhaft öffentlich machen, Alias/Directory/Server-ACL ändern, andere Berater zu Admins machen.
Berater-Admin / Lead
PL 100
Raumadministrator für Bereich/Organisation.Beraterrechte vergeben/entziehen, Raumzustand konfigurieren, Eskalationen lösen.Keine Server-Admin-API im Browser; keine globale User-Verwaltung ohne Backend-Audit.
Plattform-Owner / Provisioner
Creator / Server Admin
Service-Account, Room Creator bei v12 oder Server-Admin außerhalb der Räume.Räume erzeugen, Policies erzwingen, Räume archivieren, Notfallmoderation.Nicht als normaler Alltags-Berater benutzen; sonst wird Audit und Haftung unsauber.

3. Was Matrix wirklich kann

m.room.power_levels

Der zentrale Permission-Mechanismus. Er definiert, welches Power Level ein User hat und welches Level für Aktionen nötig ist: Nachrichten, State Events, Invite, Kick, Ban, Redact, @room-Notifications.

State Events statt Admin-Menü

Raumname, Topic, Join Rules, History Visibility, Guest Access, Canonical Alias, Server ACL und Power Levels sind State Events. Wer state_default erreicht oder für den konkreten Event-Typ eingetragen ist, darf sie ändern.

Join Rules

public, invite, knock, restricted, knock_restricted. Für Beratungsräume: fast immer invite oder bei Organisationen restricted über einen Space.

Raumversion 12

Room Creators haben unendliches, unveränderliches Power Level. Das ist mächtig, aber gefährlich: Nur Provisioner/Owner als Creator nutzen, nicht jeden Berater.

Matrix-Limit: Das Verbot “Gäste dürfen keine Räume erstellen” ist nicht Teil eines bestehenden Raums. Es muss über Homeserver-Konfiguration, Synapse-Module/Policy, Application-Service-Provisioning oder das Produkt-Backend durchgesetzt werden.

4. Raumtypen und Defaults

RaumtypUse CaseJoin RuleHistoryPower-Level-Profil
Kunden-/Fallraum1 Gast/Kunde ↔ ein oder mehrere Berater.invitejoined oder invitedGast 0, Berater 50, Lead/Admin 100, Provisioner Creator.
Interner BeraterraumTeam-Abstimmung ohne Gäste.restricted über Berater-Space oder inviteshared möglichBerater 0 oder 50 je nach Moderationsbedarf, Leads 100.
Lobby / IntakeVorklärung oder Support-Triage.knock oder app-seitig invitejoinedGäste 0, Moderation 50, keine sensiblen Altverläufe.
Admin-/Ops-RaumSystemmeldungen, Eskalationen, Audits.invitesharedNur Admins/Provisioner. Keine Gäste.

5. Matrix Spaces: sinnvoll, aber nicht als Permission-Ersatz

Spaces sind in Matrix selbst wieder Räume: ein Space ist ein Raum mit m.room.create.content.type = "m.space". Er dient primär zur Organisation und Entdeckung von Unterräumen, nicht als globale Rollen-/Rechteverwaltung. Trotzdem sind Spaces für euer Produkt sehr nützlich, wenn ihr sie bewusst als Struktur- und Membership-Layer einsetzt.

Was ist ein Space?

Ordner / Team / Organisation

Ein Space gruppiert Räume über m.space.child-Events. Der Child-Eintrag zeigt auf einen Raum, enthält via-Server, optional order für Sortierung und suggested als UI-Hinweis.

Backlink

Parent-Beziehung

Ein normaler Raum kann mit m.space.parent auf einen oder mehrere Spaces zeigen. canonical: true markiert den Haupt-Space. Das ist Discovery/Navigation, nicht automatisch Zugriff.

Membership-Gating

Restricted Rooms

Der wirklich interessante Permission-Bezug: Räume können per join_rule: restricted erlauben, dass Mitglieder eines bestimmten Space-/Membership-Raums beitreten dürfen. Damit wird Space-Mitgliedschaft zu einer Art Gruppenmitgliedschaft.

Kein Chatraum

Timeline vermeiden

Die Spec sagt: normale Nachrichten in Space-Räumen sind discouraged. Deshalb für Spaces events_default hoch setzen, typischerweise 100, damit sie als Container und nicht als Chat missbraucht werden.

Solltet ihr Spaces verwenden?

EinsatzEmpfehlungWarum
Berater-Team / OrganisationJaEin Berater-Space kann interne Räume bündeln und als Membership-Basis für restricted interne Räume dienen.
Kunden-/Fallräume gruppierenJa, mit VorsichtEin Space pro Kunde/Case ist gut für Navigation, wenn mehrere Räume pro Kunde existieren. Bei genau einem Fallraum pro Kunde wäre es Overhead.
Gast sieht seine Räume strukturiertOptionalWenn der Gast viele Räume/Module hat, ist ein Kunden-Space sinnvoll. Wenn er nur einen Chat hat, lieber einfach halten.
Globale RechteverwaltungNeinSpaces ersetzen kein RBAC. Power Levels bleiben pro Raum; Produktrollen bleiben im Backend.
Security BoundaryNicht alleinEin Child in einem Space macht den Raum nicht automatisch sicher/unsicher. Zugriff entsteht durch Membership, Join Rules und Power Levels.
Meine Empfehlung: Ja, Spaces verwenden — aber als Organisations- und Gruppenmembership-Schicht. Für euren Fall: ein interner Berater-Space, optional ein Kunden-/Case-Space bei komplexeren Kunden, und weiterhin pro Raum das restriktive Power-Level-Profil. Gäste sollten nicht automatisch in einen großen Organisations-Space; nur in genau die Spaces/Räume, die sie sehen dürfen.

Beispiel: Berater-Space als Gruppe

{
  "creation_content": {"type": "m.space"},
  "preset": "private_chat",
  "visibility": "private",
  "name": "Berater-Team",
  "initial_state": [
    {"type":"m.room.join_rules","state_key":"","content":{"join_rule":"invite"}},
    {"type":"m.room.history_visibility","state_key":"","content":{"history_visibility":"joined"}},
    {"type":"m.room.guest_access","state_key":"","content":{"guest_access":"forbidden"}}
  ],
  "power_level_content_override": {
    "events_default": 100,
    "state_default": 100,
    "invite": 100,
    "kick": 100,
    "ban": 100,
    "redact": 100
  }
}

Beispiel: Raum in Space aufnehmen

{
  "type": "m.space.child",
  "state_key": "!fallraum:example.com",
  "content": {
    "via": ["example.com"],
    "order": "010-fallraum",
    "suggested": true
  }
}

6. Konkretes Power-Level-Profil

Dieses Profil ist restriktiv genug für Gäste, aber lässt Berater echte Moderation machen. Wenn Berater keine Gäste entfernen dürfen, setze kick und redact auf 75 statt 50.

Aktion / EventEmpfohlenes LevelBegründung
Normale Nachrichten events_default0Gäste sollen schreiben können.
State Events Default state_default100Verhindert, dass Berater/Gäste Raumstruktur ändern.
Einladen invite50Berater dürfen Kunden/Gäste hinzufügen; Gäste nicht.
Kicken kick50Berater können problematische Gäste entfernen.
Bannen ban75Dauerhafte Sperren sind stärker als Entfernen.
Fremde Events redacten redact50Berater können Inhalte moderieren; Gäste nicht.
@room Notification50Gäste sollen keine Massennotifikation auslösen.
m.room.power_levels100Nur Admins ändern Rechte.
m.room.join_rules, m.room.history_visibility, m.room.guest_access, m.room.server_acl100Security-/Privacy-relevant.
m.room.name, m.room.topic, m.room.avatar50 oder 10050, wenn Berater Räume pflegen sollen; 100, wenn alles zentral verwaltet wird.
m.room.tombstone bei Room v12+150Spec empfiehlt höher als state_default; Raumersetzung nur durch Provisioner.

7. Provisioning-Templates

Die Räume sollten nicht von beliebigen Clients erstellt werden, sondern über euren Backend-Service. Der Service ruft /_matrix/client/v3/createRoom mit festen Defaults auf.

Kunden-/Fallraum

{
  "preset": "private_chat",
  "visibility": "private",
  "name": "Fall: ACME / onboarding",
  "topic": "Beratungskanal zwischen ACME und dem zugewiesenen Team",
  "invite": ["@kunde:example.com", "@berater:example.com"],
  "initial_state": [
    {"type":"m.room.join_rules","state_key":"","content":{"join_rule":"invite"}},
    {"type":"m.room.history_visibility","state_key":"","content":{"history_visibility":"joined"}},
    {"type":"m.room.guest_access","state_key":"","content":{"guest_access":"forbidden"}}
  ],
  "power_level_content_override": {
    "users_default": 0,
    "events_default": 0,
    "state_default": 100,
    "invite": 50,
    "kick": 50,
    "ban": 75,
    "redact": 50,
    "notifications": {"room": 50},
    "events": {
      "m.room.name": 50,
      "m.room.topic": 50,
      "m.room.avatar": 50,
      "m.room.power_levels": 100,
      "m.room.join_rules": 100,
      "m.room.history_visibility": 100,
      "m.room.guest_access": 100,
      "m.room.server_acl": 100,
      "m.room.tombstone": 150
    },
    "users": {
      "@berater:example.com": 50,
      "@lead:example.com": 100
    }
  }
}
Room v12 Hinweis: In Raumversion 12 dürfen Creator nicht in users stehen, weil Creator ein unveränderlich unendliches Power Level haben. Setze deshalb den Provisioner/Service-Account als Creator und normale Berater nur in users.

Interner Beraterraum über Space-Gating

{
  "preset": "private_chat",
  "visibility": "private",
  "initial_state": [
    {"type":"m.room.join_rules","state_key":"","content":{
      "join_rule":"restricted",
      "allow":[{"type":"m.room_membership","room_id":"!berater-space:example.com"}]
    }},
    {"type":"m.room.history_visibility","state_key":"","content":{"history_visibility":"shared"}},
    {"type":"m.room.guest_access","state_key":"","content":{"guest_access":"forbidden"}}
  ]
}

8. Umsetzungsschritte

1

Backend als Gatekeeper

  • Produktrollen im Backend/IdP halten.
  • Matrix-Access nur nach Produkt-Login ausgeben.
  • Raumerstellung nur über Backend-Endpunkt, nicht frei im Client.
2

Provisioner einführen

  • Service-Account erstellt Räume.
  • Setzt Standard-State und Power Levels.
  • Synchronisiert Rollenänderungen in bestehende Räume.
3

Client hart, Server härter

  • Buttons anhand Power Levels ausblenden.
  • Serverfehler sauber anzeigen.
  • Keine Admin-Tokens oder Provisioning-Logik im Browser.
4

Audit & Drift

  • Änderungen an Power Levels loggen.
  • Regelmäßiger Drift-Check: Raumzustand entspricht Produktmodell?
  • Notfallprozess für Redaction, Ban, Raumarchivierung.

Decision Matrix

FrageEmpfehlung
Soll ein Berater Admin sein?Nein, standardmäßig Moderator. Admin nur für Leads/Org-Admins.
Dürfen Gäste Räume erstellen?Nein. Im Produkt-Backend und Homeserver-Policy blocken.
Dürfen Gäste einladen?Nein. invite: 50.
Dürfen Berater Kunden einladen?Ja, wenn sie fallverantwortlich sind. Sonst Einladung über Backend-Workflow.
Dürfen Berater Raumname/Topic ändern?Optional. Für Arbeitsräume ja; für compliance-kritische Räume nur Admin.
Dürfen Berater fremde Nachrichten löschen?Meist ja. redact: 50 mit Audit.
Public Directory nutzen?Nicht für Kundenräume. Directory-Sichtbarkeit ist Discovery, nicht Sicherheit.

9. Quellen & Spec-Bezug

Die Ausarbeitung basiert auf Matrix Client-Server API und Room-Version-Spezifikation. Relevante Punkte: