Basis: Certvia dev@a48c5fb als Fundament für Craftvia
Unveränderter Stand von certvia/dev (a48c5fb) plus Craftvia-Spezifikation und Brandbook unter docs/craftvia/. ISMS-Module werden im Folgecommit entfernt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Vendored
+70
@@ -0,0 +1,70 @@
|
||||
import type { DefaultSession } from "next-auth";
|
||||
|
||||
/**
|
||||
* Schlanke Mitgliedschafts-Info für den Tenant-Switcher (Option C, WS1).
|
||||
* Eine Person (Identity) kann mehrere Mitgliedschaften (per-Mandant-User) haben;
|
||||
* die Session trägt die Liste + den AKTIVEN Mandanten.
|
||||
*/
|
||||
export interface SessionMembership {
|
||||
membershipId: string; // = User.id der Mitgliedschaft
|
||||
tenantId: string;
|
||||
tenantSlug: string;
|
||||
tenantName: string;
|
||||
}
|
||||
|
||||
declare module "next-auth" {
|
||||
interface Session {
|
||||
user: {
|
||||
// = aktive Mitgliedschaft (User.id) — STABIL, Basis für Ownership/RLS/Audit.
|
||||
id: string;
|
||||
// globale Anmelde-Identität (Option C). Optional, da die GETRENNTE Plattform-
|
||||
// Auth-Instanz (platform-auth.ts) dieselben Typen nutzt, aber keine Identity hat.
|
||||
identityId?: string;
|
||||
// = activeTenantId; gespiegelt als tenantId, damit ~356 dbForTenant-Call-Sites
|
||||
// unverändert bleiben.
|
||||
tenantId: string;
|
||||
tenantSlug: string;
|
||||
activeMembershipId?: string;
|
||||
// alle aktiven Mitgliedschaften der Identity (für /select-tenant, WS2).
|
||||
memberships?: SessionMembership[];
|
||||
roles: string[];
|
||||
permissions: string[]; // des AKTIVEN Mandanten
|
||||
isPlatformAdmin: boolean;
|
||||
// MFA an der Identity eingerichtet?
|
||||
mfaEnrolled?: boolean;
|
||||
// SEC2: Ausstellungszeitpunkt des JWT (`iat`, Sekunden seit Epoche). Wird
|
||||
// gegen `sessionsValidAfter` des Kontos geprüft, um Sessions serverseitig
|
||||
// zu entwerten (src/server/sessions.ts).
|
||||
tokenIssuedAt?: number;
|
||||
} & DefaultSession["user"];
|
||||
}
|
||||
|
||||
interface User {
|
||||
id?: string;
|
||||
identityId?: string;
|
||||
tenantId: string;
|
||||
tenantSlug: string;
|
||||
activeMembershipId?: string;
|
||||
memberships?: SessionMembership[];
|
||||
roles: string[];
|
||||
permissions: string[];
|
||||
isPlatformAdmin: boolean;
|
||||
mfaEnrolled?: boolean;
|
||||
}
|
||||
}
|
||||
|
||||
// next-auth/jwt re-exportiert nur aus @auth/core/jwt — Augmentation muss dorthin
|
||||
declare module "@auth/core/jwt" {
|
||||
interface JWT {
|
||||
userId: string;
|
||||
identityId?: string;
|
||||
tenantId: string;
|
||||
tenantSlug: string;
|
||||
activeMembershipId?: string;
|
||||
memberships?: SessionMembership[];
|
||||
roles: string[];
|
||||
permissions: string[];
|
||||
isPlatformAdmin: boolean;
|
||||
mfaEnrolled?: boolean;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user