5.2: gemeinsamen Firmen-Sync-Kern als User::syncCompaniesWithRoles() gezogen
Analyse der beiden ~40/160-Zeilen-save()-Methoden (users/create vs edit): sie teilen nur den User-Attribut-Payload und den byte-identischen Firmen-Sync-Loop (Bearbeiten hat zusaetzlich Profil/Kontakte/volle Billing-CRUD). Ein voller UserUpsertService waere Over-Engineering (ueberwiegend Branches) — daher nur der wirklich gemeinsame Persistenz-Kern: User::syncCompaniesWithRoles(array $companyIds, array $roles) baut das Pivot-Payload (fehlende Rolle => 'member') und synct. Beide Formulare nutzen es; im Bearbeiten kommen die linkedCompanyIds nun direkt aus $validated. Test: UserSyncCompaniesTest (Rollen-Zuordnung, member-Default, Detach). 29 User-Tests gruen. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
6b1d84fc01
commit
1729e35943
4 changed files with 57 additions and 15 deletions
|
|
@ -482,4 +482,23 @@ class User extends Authenticatable implements MustVerifyEmail
|
|||
|
||||
return in_array($companyId, $this->accessibleCompanyIds(), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Synchronisiert die Firmenzuordnungen samt Pivot-Rolle. Fehlt zu einer
|
||||
* Firma eine Rolle, greift 'member'. Gemeinsamer Persistenz-Kern des
|
||||
* Anlegen- und Bearbeiten-Formulars (admin/users).
|
||||
*
|
||||
* @param list<int|string> $companyIds
|
||||
* @param array<int|string, string> $roles companyId => role
|
||||
*/
|
||||
public function syncCompaniesWithRoles(array $companyIds, array $roles): void
|
||||
{
|
||||
$payload = [];
|
||||
|
||||
foreach ($companyIds as $companyId) {
|
||||
$payload[$companyId] = ['role' => $roles[$companyId] ?? 'member'];
|
||||
}
|
||||
|
||||
$this->companies()->sync($payload);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue