Wie Customermates gebaut ist, wie Daten isoliert sind, und wie externer KI-Zugriff kontrolliert wird.
Single-Tenant-pro-Company-Datenmodell, auf jeder Ebene erzwungen. Postgres-Row-Isolation per Company-Scope. API-Keys tragen User-Identität. Agents sehen nur das, was der Owner-User sehen darf.
Jeder Record gehört zu einer Company. Die Company-ID wird an drei Stellen erzwungen:
companyId in jedem where.@TenantInteractor stellt sicher, dass Interactors, die Scope vergessen, zur Laufzeit werfen.Cross-Tenant-Reads sind über die Public-Oberfläche nicht möglich. Es gibt keinen Admin-Panel, das Scope umgeht.
Drei Wege:
Secure unter HTTPS.x-api-key: 64-Zeichen-Token, SHA-256-gehasht at-rest, an User gebunden.Alle drei lösen auf denselben User- und Company-Kontext auf. API-Keys haben ein Display-Präfix für die Erkennung in Audit-Logs.
Per User, Rollen-getrieben. Rollen tragen Permissions auf Resources (Contacts, Deals etc.) und Actions (Read, Create, Update, Delete). Jeder Interactor ruft userService.hasPermissionOrThrow(resource, action) vor dem Handeln.
API-Keys erben die Rechte ihres Users. Keine separaten Key-Level-ACLs heute.
MCP-Calls sind durch denselben API-Key-Check gegated. Wenn eine KI über MCP handelt:
/api/v1/mcp mit dem API-Key des Users.Sicherheits-Guardrails speziell für schwächere Modelle:
null auf Relationship-Array wird vor der DB abgelehnt..env werden nie geloggt. Der Logger redacts alles, was wie Key, Token oder Passwort aussieht.Jeder Write geloggt: User, Action, Entity, Before/After. Aus UI queryable. Als JSON exportierbar.
Verantwortungsvoll an security@customermates.com. PGP-Key im Repo. Ack-Ziel: 24 Stunden.