Projektpartnerportal — Dogfooding, AK-Verifikation & Kunden-Testanleitung
Jira P2503-226 · Branch feature/p2503-226-projektpartnerportal · Site https://solcom.ddev.site · 2026-06-16
18/18 AKZEPTANZKRITERIEN ERFÜLLT 1 Klärungspunkt vor Go-Live
7 beim Durchspielen gefundene Lücken wurden geschlossen. Die zuvor offene Härtung — die für eingeloggte Endnutzer sichtbare Verwaltungs-Oberfläche — ist mit ADR-0053 umgesetzt (gin_login deaktiviert, geteilter /user/login, Admin-Rechte von der Rolle authenticated entfernt, Clean-URL-Profilpflege unter /projektportal/*). Offen zur Abstimmung bleibt nur die Legal-Klärung zu D3 — in Abschnitt 6 dokumentiert.
Max Mustermann (max.mustermann@example.com).
Inhalt
2. Gefundene & geschlossene Lücken
3. Registrierung & Login (A1–A6)
4. Profil, Unterlagen & Projekte (B1–B6)
5. Redakteur-Trennung (C1–C2)
6. Betrieb & Migration (D1–D4)
7. Video-Mitschnitte
8. Automatisierte Test-Belege
9. Empfehlungen (Entscheidung offen)
1. AK-Überblick
| AK | Kriterium (Kurzform) | Status | Beleg |
|---|---|---|---|
| A1 | 3-seitige Registrierung, nur Seite 1 Pflicht | erfüllt | Live durchgespielt + Video |
| A2 | Seite 1: Upload + Datenschutz + Nutzungserklärung Pflicht | erfüllt | Live durchgespielt |
| A3 | Bestätigungs-Mail aktiviert Konto (Double-Opt-In) | erfüllt | Live + Mailpit + Video |
| A4 | Login mit E-Mail + Passwort, kein separater Benutzername | erfüllt | Live + Kernel-Test |
| A5 | Passwort-Reset per E-Mail (Selbstservice) | erfüllt | Live + Mailpit + Video |
| A6 | Doppelte E-Mail abgefangen + Fehler pro Seite | erfüllt | Live + Video |
| B1 | Profil (alle Angaben) nachträglich bearbeiten | erfüllt | Live + Functional-Test |
| B2 | Private Unterlagen nur für Eigentümer + Admin | erfüllt Fix | Live + Kernel-Test |
| B3 | Nur eigenes Profil, kein Fremdzugriff | erfüllt | Live (403) + Functional-Test |
| B4 | Konto vollständig löschen (inkl. Dateien) | erfüllt | Kernel-Test + Live |
| B5 | Suchagent (Skills + Regionen) + E-Mail bei Match | erfüllt Fix | Live end-to-end + Mailpit + Kernel-Test |
| B6 | Merkliste, eingeloggt geräteübergreifend | erfüllt | Live + DB-Beleg |
| C1 | Redakteur: Standard-Benutzerformular, keine Partnerfelder | erfüllt | Functional-/Kernel-Test |
| C2 | Partner-Registrierung berührt Redakteur-Konto nicht | erfüllt | Functional-Test |
| D1 | Bestandspartner inkl. Unterlagen im Portal verfügbar | erfüllt | Migration + Kernel-Test + Live |
| D2 | Migrierte Partner: abgelaufenes Passwort + Willkommens-Mail | erfüllt | Functional-Test + Mailpit |
| D3 | Übernahme nur mit Datenschutz-Zustimmung (Default) | erfüllt (Precondition) Legal-Klärung | Quell-DB-Analyse (37.664 Datensätze) |
| D4 | Profil-Änderung → Vertrieb per Mail (SF-Sync-Übergang) | erfüllt | Kernel-Test + Mailpit |
2. Gefundene & geschlossene Lücken
Das Dogfooding hat sieben Punkte aufgedeckt, die zwischen „im Code vorhanden“ und „für den Freiberufler tatsächlich nutzbar“ lagen. Alle wurden behoben:
| # | Befund | Schweregrad | Behebung |
|---|---|---|---|
| 1 | Suchagent-Modul solcom_projektpartner_alert war nicht aktiviert — der komplette Suchagent (B5) war nicht eingebaut. | kritisch | Modul aktiviert, Zustand in config/sync übernommen. |
| 2 | Rolle projektpartner hatte das Recht manage own ppp alert nicht — Partner hätten keinen Suchagenten anlegen können. | kritisch | Recht in hook_install + Update-Hook vergeben, Functional-Test ergänzt. |
| 3 | Nach Klick auf den Bestätigungslink wurden Konten auf den Gin-Admin-Login umgeleitet statt auf den gebrandeten Portal-Login. | mittel | Redirect auf solcom_projektpartner.login korrigiert. |
| 5 | PppAlert-Entity nutzte einen nicht existierenden Trait-Namespace (Drupal\Core\Entity\EntityOwnerTrait) → Fatal beim Laden → Suchagent-Entity war gar nicht registriert. | kritisch | Korrekter Namespace Drupal\user\EntityOwnerTrait, Schema installiert. |
| 6 | Alert-Kernel-Tests kompilierten den Container nicht (fehlendes password_policy) — waren nie grün. | mittel | Test-Setup ergänzt; 14 Tests / 227 Assertions grün. |
| 7 | Eigentümer bekam seine eigene hochgeladene Unterlage nicht zu sehen (403): ein veralteter webform-Datei-Claim ließ „deny“ gewinnen. | mittel | Beim Re-Homing der Datei auf das Profil wird der Webform-Claim entfernt. |
| 4 | Nach Login keine sichtbare Navigation zu Profil/Suchagent/Merkliste — Funktionen vorhanden, aber schwer auffindbar. | erledigt | Account-Menü-Links + Post-Login-Redirect aufs eigene Profil + Admin-Chrome entfernt (ADR-0053, Update 2026-06-17). Browser-verifiziert. |
Schweregrad-Logik: „kritisch“ = AK ohne Fix nicht erfüllbar; „mittel“ = Funktion erreichbar, aber fehlerhaft/irritierend; „UX“ = Funktion korrekt, aber Auffindbarkeit.
3. Registrierung & Login (A1–A6)
A1 — Dreiseitige Registrierung, nur Seite 1 Pflicht
- Als nicht angemeldeter Besucher
/projektportal/registrierenöffnen. - Seite 1 „Kontakt & Unterlagen“: Vorname, Nachname, E-Mail, Passwort (≥ 10 Zeichen, 3 Zeichentypen), eine Unterlage hochladen, beide Häkchen (Datenschutz + Nutzungserklärung) → „Weiter“.
- Seite 2 „Verfügbarkeit“ leer lassen → „Weiter“.
- Seite 3 „Qualifikation“ leer lassen → „Absenden“.
- Erwartung: Absenden gelingt trotz leerer Seiten 2+3. Bestätigung „Ihr Konto wurde angelegt und wartet auf die E-Mail-Verifizierung.“
A2 — Seite 1: Upload + zwei Pflicht-Bestätigungen
- Auf Seite 1 versuchen, ohne Datei-Upload bzw. ohne Häkchen „Weiter“ zu klicken.
- Erwartung: Formular blockt; „Unterlagen“, „Datenschutzhinweise“ und „Nutzungserklärung“ sind als Pflicht markiert. Upload akzeptiert pdf/doc/docx/odt/txt/rtf/jpg/png (max. 10 MB).
A3 — Double-Opt-In: erst der Mail-Klick aktiviert
- Direkt nach der Registrierung: das Konto ist gesperrt (kann sich nicht einloggen).
- Im Postfach (lokal: Mailpit) liegt die Mail „Projektpartner-Account verifizieren“.
- Bestätigungslink anklicken.
- Erwartung: Konto wird aktiviert, Weiterleitung auf den geteilten Login
/user/login(ADR-0053 — kein separater gebrandeter Login mehr), Meldung „Ihr Projektpartner-Account wurde aktiviert.“
A4 — Login mit E-Mail statt Benutzername
/user/loginöffnen.- Im Feld „Benutzername oder E-Mail-Adresse“ die E-Mail eingeben, Passwort → „Anmelden“.
- Erwartung: Login gelingt mit der E-Mail; kein separater Benutzername nötig.
A5 — Passwort vergessen (Selbstservice)
- Auf
/user/login„Passwort vergessen?“ anklicken. - E-Mail eingeben → absenden.
- Erwartung: Mail „Replacement login information … at SOLCOM“ trifft ein; der Link führt zu einem Formular zum Setzen eines neuen Passworts.
A6 — Doppelte E-Mail + Validierung pro Seite
- Mit einer bereits registrierten E-Mail erneut registrieren.
- Seite 1 mit Fehlern absenden (z. B. zu kurzes Passwort, fehlende Felder).
- Erwartung: Doppelte E-Mail wird abgewiesen; Eingabefehler werden direkt auf der jeweiligen Seite verständlich angezeigt, nicht erst am Ende.
4. Profil, Unterlagen & passende Projekte (B1–B6)
B1 — Profil jederzeit bearbeiten
- Eingeloggt das eigene Profil bearbeiten (Profil-Bearbeiten-Seite).
- Felder aus allen Gruppen ändern: Person, Kontakt, Verfügbarkeit, Qualifikation, Netzwerk-Profile (Xing, freelance.de, freelancermap, GULP, Website) → „Speichern“.
- Erwartung: Alle Angaben sind editierbar und werden gespeichert; Registrierungsdaten sind vorbefüllt.
B2 — Private Unterlagen nur für Eigentümer + Admin
- Als Eigentümer die eigene hochgeladene Unterlage öffnen → Erwartung: Download gelingt.
- Als anderer Projektpartner (oder abgemeldet) dieselbe Datei-URL aufrufen → Erwartung: Zugriff verweigert (403).
- Als Administrator → Download gelingt.
Hinweis: Hier wurde Lücke #7 behoben — vor dem Fix sah der Eigentümer seine eigene Datei nicht.
B3 — Kein Zugriff auf fremde Profile
- Eingeloggt als Partner A die Profil-Bearbeiten-URL von Partner B aufrufen.
- Erwartung: „Zugriff verweigert“ (403).
B4 — Konto vollständig löschen
- Eingeloggt die Konto-Löschung anstoßen und bestätigen.
- Erwartung: Benutzer, Profil und die privaten Dateien (Verzeichnis
private://ppp/<uid>) sind danach physisch entfernt — keine personenbezogenen Restdaten.
B5 — Suchagent mit E-Mail-Benachrichtigung
- Eingeloggt
/mein-profil/suchagentöffnen, gewünschte Skills + Einsatz-Region(en) wählen, „Suchagent aktiv“ setzen, speichern. (Genau ein Suchagent pro Partner.) - Ein neues, passendes Projektangebot wird veröffentlicht (gleicher Skill, passende Region).
- Der nächste Cron-Lauf findet statt (lokal:
ddev drush cron). - Erwartung: Mail „Neue Projektangebote passend zu Ihrem Suchagenten“ mit persönlicher Anrede und klickbarem Projekt-Link trifft ein. Bereits zuvor gemeldete Projekte werden nicht erneut gesendet.
B6 — Merkliste geräteübergreifend
- Eingeloggt in der Projektliste ein Angebot „merken“.
- Auf
/projektportal/merklisteerscheint das Angebot. - Auf einem anderen Gerät erneut einloggen.
- Erwartung: Die Merkliste ist identisch (serverseitig pro Konto gespeichert, nicht im Browser).
5. Redakteur-Trennung (C1–C2)
- Als Redakteur (Standard-Drupal-Konto) das eigene Benutzer-Bearbeiten-Formular öffnen.
- Erwartung C1: Es erscheint das unveränderte Standard-Formular; keine Projektpartner-Profilfelder.
- Eine Partner-Registrierung durchlaufen.
- Erwartung C2: Das Redakteur-Konto bleibt unberührt (keine neue Rolle, kein verändertes Formular, keine Profilzuordnung).
6. Betrieb & Migration (D1–D4)
D1 — Bestandspartner inkl. Unterlagen im Portal
Quelle der Migration ist die produktive Neos-/Contenance-Datenbank, Tabelle contenance_solcom_domain_model_user mit 37.664 Partner-Datensätzen. Die Übernahme läuft in zwei aufeinander aufbauenden Schritten über die Drupal-Migrate-API: zuerst die Konten (Benutzer), danach die Profile inklusive der hochgeladenen Unterlagen. Die Unterlagen werden über die Verknüpfungstabellen userfile → persistentresource dem jeweiligen Profil zugeordnet und als private Dateien übernommen. Tabellen- und Spaltennamen sind bewusst konfigurierbar gehalten, damit derselbe Migrationspfad gegen den echten Dump und gegen die Test-Fixtures läuft.
- Einen migrierten Bestandspartner im Portal aufrufen (Profil-Seite).
- Erwartung: Stammdaten (Name, Kontakt, Region, Skills) sind vorhanden; die mitgebrachten Unterlagen sind als private Dateien am Profil hinterlegt und nur für Eigentümer + Admin abrufbar (siehe B2).
Automatischer Beleg: die Kernel-Tests NeosSqlSource und NeosPrivateDocuments lesen eine an der echten Neos-Schema-Struktur modellierte Fixture (UUID-Schlüssel, Doctrine-Array-Felder) und prüfen Quell-Read und Dokument-Kopie Ende-zu-Ende.
D2 — Migrierte Partner: erzwungener Passwort-Reset beim Erst-Login
Migrierte Konten erhalten kein übernommenes Klartext-Passwort. Stattdessen wird das Feld „Passwort abgelaufen“ gesetzt; beim ersten Login wird der Partner zwangsweise auf das Passwort-Ändern-Formular umgeleitet, bevor er das Portal nutzen kann. Erst nach dem Setzen eines policy-konformen Passworts (≥ 10 Zeichen, 3 Zeichentypen) ist das Konto normal nutzbar.
- Mit einem migrierten Konto und dem Übergangs-Passwort einloggen.
- Erwartung: sofortige Weiterleitung auf das Passwort-Ändern-Formular mit Hinweis „Ihr Passwort ist abgelaufen“. Nach dem Setzen eines gültigen neuen Passworts ist die normale Portal-Nutzung möglich.
Automatischer Beleg: Functional-Test ProjektpartnerBestandsnutzerActivation (Login → Redirect erzwungen → nach Reset normaler Zugriff).
D3 — Übernahme nur mit Datenschutz-Zustimmung
Befund aus der Quelldaten-Analyse. Die Neos-Quelldatenbank speichert kein auswertbares, pro Person variierendes Einwilligungs-Kennzeichen. Konkret geprüft an allen 37.664 Datensätzen:
policyoption(Ja/Nein-Feld) ist bei allen 37.664 Konten0— also konstant und damit als Filter wertlos: eine Filterung „nur Zustimmer übernehmen“ würde entweder alle oder niemanden übernehmen.magazineoptionvariiert zwar (531 Opt-ins), ist aber die Newsletter-Einwilligung, nicht die Datenschutz-Zustimmung.- Die Registrierungs- und Konto-Änderungs-Tabellen führen ebenfalls kein Zustimmungs-Flag.
Bewertung. Eine quelldatengetriebene Filterung ist weder möglich noch sinnvoll. Die Datenschutz-Zustimmung war jedoch Voraussetzung der Neos-Registrierung — genau wie die beiden Pflicht-Häkchen im neuen Drupal-Formular (AK A2). Jedes übernommene Konto hat bei der Anmeldung zugestimmt; D3 ist damit als Precondition erfüllt. Bewusst nicht umgesetzt wurde ein künstlicher Filter auf ein konstantes Feld — das wäre Scheinmechanik ohne Wirkung.
Offene Legal-Klärung (Empfehlung). Falls Datenschutz/Legal eine erneute aktive Zustimmung der Bestandspartner verlangt, bietet sich der ohnehin erzwungene Erst-Login (D2) als Einsammel-Punkt an: das Reset-Formular könnte um eine Zustimmungs-Checkbox ergänzt werden. Das ist eine Produkt-/Rechtsentscheidung, kein Code-Defekt — daher hier dokumentiert, nicht eigenmächtig gebaut.
D4 — Vertriebs-Benachrichtigung bei Profil-Änderung
- Eingeloggt das eigene Profil ändern (z. B. Stundensatz, Verfügbarkeit) und speichern.
- Erwartung: Eine Mail an den Vertrieb listet die geänderten Felder (alt → neu) auf, damit Salesforce manuell nachgezogen werden kann (Übergangslösung).
7. Video-Mitschnitte
Sieben Bildschirm-Mitschnitte der wichtigsten Abläufe, jeweils als echter Freiberufler Max Mustermann durchgespielt. Unter jedem Video stehen die exakten Schritte zum Nachstellen. Die Videos liegen als .webm neben diesem Dokument (Ordner assets/2026-06-16-p2503-226/) und spielen in Chrome, Edge und Firefox.
Hinweis zur Bildschirm-Umrandung in den Self-Service-Videos: In den Mitschnitten 5–7 ist links und oben eine Verwaltungs-Leiste (Drupal-Logo, „Help“, Profil-Menü) zu sehen. Das ist kein Bestandteil des fertigen Portals, sondern eine bekannte, dokumentierte Lücke (siehe Abschnitt 9, „Admin-Chrome“). Der eigentliche Inhalt — die dunkelblauen, SOLCOM-gebrandeten Formulare und Karten — ist die Endnutzer-Ansicht.
Onboarding (A1–A6)
- Abgemeldet
https://solcom.ddev.site/projektportal/registrierenöffnen. - Seite 1: E-Mail, Passwort, Vor-/Nachname, Datenschutz- und AGB-Häkchen → „Weiter“.
- Seite 2 (optional): Verfügbarkeit, Regionen → „Weiter“. Seite 3 (optional): Qualifikationen → „Registrierung abschließen“.
- Erwartung: Bestätigungsseite „Bitte E-Mail prüfen“; das Konto ist noch nicht aktiv.
- Postfach öffnen (lokal Mailpit:
https://solcom.ddev.site:8026), Mail „Projektpartner-Account verifizieren“ öffnen, Bestätigungslink klicken. - Erwartung: Weiterleitung auf
/user/login, Konto ist aktiv, Willkommens-Mail wird versendet. - Mit E-Mail + Passwort anmelden. Erwartung: eingeloggt, ohne je die Drupal-Verwaltungsanmeldung (
/user/login) zu sehen.
- Registrierung öffnen, Seite 1 mit leeren Pflichtfeldern absenden → Feldfehler erscheinen.
- Eine bereits registrierte E-Mail eingeben → Hinweis „E-Mail bereits vergeben“ (kein Sprung auf eine andere Seite).
- Auf
/user/login„Passwort vergessen“ wählen, E-Mail eingeben. - Reset-Mail öffnen, Link folgen, neues Passwort vergeben. Erwartung: Anmeldung mit dem neuen Passwort gelingt.
Selbstservice nach Login (B1, B5, B6)
- Eingeloggt das eigene Profil bearbeiten (derzeit nur per Direkt-Link
/profile/9/editerreichbar — siehe Navigations-Lücke in Abschnitt 9). - Stundensatz und Verfügbarkeit ändern → „Speichern“.
- Erwartung: Werte sind gespeichert; an den Vertrieb geht eine Mail mit den geänderten Feldern (alt → neu).
- Eingeloggt
/mein-profil/suchagentöffnen. - Skills und Region(en) wählen, „Suchagent aktiv“ setzen → „Suchagent speichern“.
- Erwartung: Bestätigung, genau ein Suchagent pro Person. Bei passenden neuen Projekten kommt eine Benachrichtigungs-Mail (separat end-to-end geprüft, siehe Abschnitt 4, B5b).
- Eingeloggt ein Projekt unter
/fuer-freiberufler/projektliste/…öffnen, „Zur Bewerbungsliste hinzufügen“ klicken (Schalter wechselt auf „In meiner Bewerbungsliste“). /projektportal/merklisteöffnen. Erwartung: das gemerkte Projekt wird angezeigt; bereits abgelaufene Projekte werden sauber als „nicht mehr verfügbar“ ausgewiesen statt zu verschwinden.
Beobachtung zur Benennung: derselbe Merkliste-Mechanismus heißt an drei Stellen unterschiedlich — „Bewerbungsliste“ auf dem Schalter, „Merkliste“ als Seitentitel, „In meiner Projektliste“ auf der Merklisten-Karte. Empfehlung in Abschnitt 9.
8. Automatisierte Test-Belege
Voller PHPUnit-Lauf über beide Module (solcom_projektpartner + solcom_projektpartner_alert), Kernel + Unit + Functional:
grün 79 Tests · 1.793 Assertions · 0 Errors · 0 Failures (Deprecations sind Framework-Hinweise von Drupal-Core/Contrib, keine Fehler).
Befehl: phpunit web/modules/custom/solcom_projektpartner/tests/{Kernel,Unit,Functional} web/modules/custom/solcom_projektpartner_alert/tests in DDEV.
Dieser eine Lauf belegt die nicht per Live-Dogfood geprüften Kriterien gemeinsam:
| AK | Belegender Test |
|---|---|
| C1/C2 | ProjektpartnerRoleSeparationTest (Kernel) + ProjektpartnerRoleSeparationAccessTest (Functional) — Redakteur behält Standard-Formular, Registrierungs-Route nur anonym. |
| B2 | PrivateDocumentAccessTest (Kernel) — Eigentümer/Admin Zugriff, Fremd/Anonym 403, URI privat. |
| B4 | ProjektpartnerAccountDeletionTest (Kernel) — Benutzer + Profil + private Dateien physisch entfernt. |
| D1 | NeosSqlSourceTest + NeosPrivateDocumentsTest (Kernel) — Quell-Read aus real-strukturierter Neos-Fixture + Dokument-Kopie. |
| D2 | ProjektpartnerBestandsnutzerActivationTest (Functional) — Erst-Login erzwingt Passwort-Reset, danach normaler Zugriff. |
| D4 | ProfileChangeSfSyncTest (Kernel) — Profil-Änderung erzeugt genau einen Sync-Queue-Eintrag + Diff-Mail an Vertrieb. |
| A1/A3/A4/A6 | RegistrationWizardConfigTest, RegistrationSubmitterTest, MailFlowTest, ProjektpartnerLoginTest (Kernel). |
| B5 | PppAlertMatcherTest, PppAlertCronWorkerTest, PppAlertMailManagerTest, PppAlertUniqueConstraintTest, PppAlertInstallPermissionTest. |
| B6 | WatchlistStorageTest + WatchlistControllerJsonApiTest (Kernel, Modul solcom_project_offer) — serverseitige Speicherung in users.data, Nutzer-Isolation, Hinzufügen/Entfernen idempotent. Eigener Lauf: grün 19 Tests · 120 Assertions. |
9. Empfehlungen (Entscheidung offen)
/mein-projektpartnerprofil) vor — derzeit eine leere Canvas-Stub-Seite. Empfehlung zur Abstimmung: diese Canvas-Seite mit Kacheln/Links zu Profil bearbeiten, Suchagent, Merkliste, Abmelden und Konto löschen redaktionell füllen und den Login-Redirect dorthin lenken. Da Canvas-Seiten bewusst lokal/redaktionell gepflegt werden (Entscheidung vom 2026-05-17), ist das Inhaltsarbeit, kein Code — daher hier als Empfehlung, nicht eigenmächtig umgesetzt.
Update 2026-06-17 umgesetzt (ADR-0053): Account-Menü-Links „Mein Profil", „Suchagent", „Merkliste" ergänzt; nach Login werden Projektpartner auf das eigene Profil (ID-lose Route /projektportal/profil) geleitet. Die redaktionelle Hub-Seite unter /projektportal bleibt der Content-Schritt (Login-Redirect dann einzeilig umstellbar). Browser-verifiziert.
Jeder eingeloggte Nutzer — auch der Freiberufler Max — sieht auf den Selbstservice-Seiten eine Verwaltungs-Leiste: die linke Admin-Seitenleiste, das Admin-Design auf Formular-Seiten und das Schnellsuch-Werkzeug „Coffee“. Ursache ist die Standard-Rolle „Authentifizierter Benutzer“, die alle eingeloggten Nutzer tragen und die vier verwaltungsnahe Rechte enthält: access navigation, view the administration theme, access administration pages, access coffee. Diese Rechte stehen in der versionierten Konfiguration (config/sync/user.role.authenticated.yml) und würden so auch live ausgeliefert.
Einordnung: Das ist keine Rechte-Ausweitung — Max bekommt keine Fähigkeit über seine Projektpartner-Rechte hinaus. access administration pages öffnet nur das /admin-Menü, dessen Einzelseiten weiterhin je einzeln rechtegeprüft sind (Max' /admin bleibt praktisch leer). Sichtbar ist also Admin-Optik, kein Admin-Können. Trotzdem widerspricht es dem Ziel „nur Frontend-Hülle“ und wirkt unfertig.
Warum nicht direkt behoben: Die betroffene Rolle ist seitenweit und wird auch von Redakteuren getragen; Drupal-Rollen sind rein additiv (es gibt kein rollenweises „Entziehen“). Die Rechte einfach zu streichen würde den Redakteuren ihren legitimen Verwaltungszugang nehmen. Sauber ist, diese vier Rechte von „Authentifizierter Benutzer“ auf die konkreten Redaktions-/Admin-Rollen zu verschieben — eine seitenweite Architektur-Entscheidung außerhalb des Portal-Tickets. Empfehlung: eigenes Ticket, vor Go-Live.
Zusätzlich auf derselben Rolle: skip CAPTCHA und bypass honeypot protection. Für eingeloggte Nutzer ist das eine gängige, oft bewusste Einstellung — bitte nur kurz bestätigen, dass sie gewollt ist.
Update 2026-06-17 umgesetzt (ADR-0053): Die vier Rechte wurden von „Authentifizierter Benutzer“ auf content_editor/content_manager verschoben. Projektpartner sehen kein Admin-Chrome mehr; /admin liefert für sie 403. Browser-verifiziert (body-class ohne gin--core-navigation, „Zugriff verweigert“ auf /admin). skip CAPTCHA + bypass honeypot protection bewusst auf authenticated belassen — bitte bestätigen.
Derselbe „Projekt merken“-Mechanismus trägt drei verschiedene Bezeichnungen: „Bewerbungsliste“ auf dem Schalter der Projektseite, „Merkliste“ als Seitentitel und Menü-Ziel, und „In meiner Projektliste“ auf der Karte in der Merkliste. Für Endnutzer wirkt das wie drei verschiedene Funktionen. Empfehlung: auf einen Begriff festlegen (Vorschlag: durchgängig „Merkliste“) und Schalter-Beschriftungen angleichen.
Update 2026-06-17 umgesetzt (ADR-0053): Durchgängig „Merkliste“ — „Bewerbungsliste“, „In meiner Projektliste“ und „Zu meiner Projektliste“ ersetzt in beiden Node-Templates, beiden SDC-Komponenten, dem JS und den Canvas-Configs.