isSuperAdmin()) { return session('current_tenant_id'); } // Mandanten-Admins sind auf ihren eigenen Mandanten beschränkt if ($user->isTenantAdmin()) { return $user->tenant_id; } return null; } /** * Prüft ob der aktuelle Benutzer auf den angegebenen Mandanten zugreifen darf */ protected function canAccessTenant(?int $tenantId): bool { $user = Auth::user(); if (!$user) { return false; } // Super Admins haben Zugriff auf alle Mandanten if ($user->isSuperAdmin()) { return true; } // Mandanten-Admins nur auf ihren eigenen Mandanten if ($user->isTenantAdmin()) { return $user->tenant_id === $tenantId; } return false; } /** * Wirft eine 403-Exception wenn der Benutzer nicht auf den Mandanten zugreifen darf */ protected function ensureTenantAccess(?int $tenantId): void { if (!$this->canAccessTenant($tenantId)) { abort(403, 'Zugriff auf diesen Mandanten nicht erlaubt'); } } /** * Stellt sicher dass Mandanten-Admins ihre Session auf ihren eigenen Mandanten setzen */ protected function ensureCorrectTenantSession(): void { $user = Auth::user(); if ($user && $user->isTenantAdmin()) { // Mandanten-Admins müssen immer ihren eigenen Mandanten in der Session haben if (session('current_tenant_id') !== $user->tenant_id) { session(['current_tenant_id' => $user->tenant_id]); // Lade auch den Mandanten in die Session if ($user->tenant) { session(['current_tenant' => $user->tenant]); } } } } }