ADR-0052: Projektmitgliedschaft statt Org-Admin-Sicht auf alle Projekte
Kontext
Org-Admins sahen jedes Projekt der Organisation in Web und Plugin. Das Plugin importierte damit auch Projekte, die andere angelegt hatten. Gewollt ist: sichtbar nur, wer dem Projekt zugeordnet ist; GIS-Schreiben nur für Owner und Bearbeiter.
Entscheidung
- Tabelle
project_members(user_idohne FK aufapp_users, Rolleowner|editor|reader). Genau ein Owner je Projekt. - Wer ein Projekt anlegt, wird Owner.
GET /projectsundGET /projects/{id}nur für Mitglieder. Projekte ohne Zeilen (Altbestand) sieht ein Org-Admin, damit er sie als Owner übernehmen kann (Speichern oder Als Owner übernehmen).- Owner fügt Bearbeiter und Reader hinzu (gleiche Organisation).
GET /qgis/layers?project_id=setztcan_edit: Owner und Bearbeitertrue, Readerfalse. Das Plugin zeigt nur Mitgliedsprojekte und schaltet Layer für Reader auf nur-lesen.- Org-Reader mit mindestens einer Owner-/Bearbeiter-Mitgliedschaft erhalten die Postgres-Edit-Rolle in
qgis_connection.
Postgres-Grants bleiben tenant-weit; die Plugin-Schicht und die API setzen die Projektgrenze. Direktes SQL mit einer Edit-Rolle umgeht sie.
Begründung
Mitgliedschaft liegt in der Tenant-DB neben projects. user_id ist eine schwache UUID wie app_users.person_id. RLS über App-User greift in QGIS nicht, weil das Plugin als {slug}_edit verbindet.
Verworfene Alternativen
| Alternative | Warum verworfen |
|---|---|
| Org-Admin sieht weiter alle Projekte | Genau das Plugin-Problem |
RLS auf geo_objects |
QGIS sitzt nicht als App-User in der Session |
Owner = project_manager (Person) |
Personen sind Stammdaten, keine Web-Konten |
Folgen
- Breaking: Listen in Web und Plugin sind mitgliedschaftsbezogen.
- Altprojekte ohne Members: Org-Admin sieht sie und kann Stammdaten speichern (wird dabei Owner). Alternativ unter Stammdaten → Projekt → Mitglieder Als Owner übernehmen.
- Plugin muss
can_editaufGET /qgis/layersauswerten.