Trade-In Account Impersonation: aus Kundensicht untersuchen
Wie Impersonation speziell auf die Trade-in Customer Surface scoped, warum es auf einer eigenen M020 Detail Page lebt und was Scoping von Profile und Notifications verhindert.
Das Trade-In Module hat seine eigene Auth Shell, eigene RLS und eigenes User Model — aus guten Gründen getrennt von der Operator App. Das bedeutet, Impersonation eines Trade-In Customers braucht einen eigenen Pfad; das Operator-side Impersonation Tool erreicht die Customer Surface nicht. Die Seite /admin/trade-in-accounts/[id] (M020 detail) ist der Ort dafür.
Was es tut
Von der M020 Detail Page wählt ein platform-staff user ein trade-in account und startet eine impersonated session dafür. Die Session öffnet das customer-facing Portal so, wie dieser Customer es sehen würde: seine pickup requests, bids, awarded ITADs, invoices, notifications. Read-only — derselbe write-block wie beim operator-side impersonation gilt auch hier.
Warum scoped auf M020
Weil Trade-In Customers und Operator Users in unterschiedlichen Tabellen leben, mit unterschiedlichen Join Paths zu Companies. Der operator-side impersonate flow nimmt operator-tenant relationships an; die Trade-In-Seite nimmt customer-account relationships an. Beides in ein Tool zu verdrahten wäre ein Gewirr aus Conditionals geworden — eine eigene Seite pro Seite ist sauberer, und die M020 Detail Page ist ohnehin der natürliche Ort für Trade-In Account Admin.
Profile + Notifications Scoping
Profile Component und Notifications Component lesen explizit die impersonated company, wenn ein impersonation context aktiv ist. Der platform-staff user sieht dadurch, was der Customer sieht: Customer Profile, Customer Notifications und keine Dekoration des eigenen Staff Accounts.
Banner Countdown
Impersonation zeigt oben eine Banner: “impersonating {company} — read-only — exit in {time}.” Der Countdown nutzt einen server-derived timestamp, damit die Banner beim Page Load stabil bleibt und die verbleibende read-only Sessionzeit klar ist.
Audit Log, end-to-end
Jede Seite, die der Impersonator besucht, schreibt in den Activity Log mit der Action “impersonate-view: /trade-in/{path}” und der user_id des Impersonators. Das Ende der Session schreibt ein “impersonate-end” Event mit duration. Der impersonated customer kann den Log über seinen Account anfragen, und die Plattform kann die Antwort “hat jemand von der Plattform unsere Daten gesehen, wann und was?” mit Rows liefern, nicht mit Absätzen.