Zum Hauptinhalt springen

UserResource

Die UserResource verwaltet alle Benutzer der Plattform (Administratoren, Auftraggeber, Sprachmittler).

Konfiguration

File: UserResource.php

EigenschaftWert
ModelApp\Models\User
Navigation GroupBenutzerverwaltung
Navigation LabelBenutzer
Navigation Iconheroicon-o-users
Navigation Sort1

State Machine

Form-Struktur

Das Formular passt sich dynamisch an die Benutzerrolle an.

Basisfelder (alle Rollen)

FeldTypValidierung
roleSelectrequired, in:admin,requester,interpreter
stateSelectrequired
salutationSelectnullable
first_nameTextInputrequired, max:255
last_nameTextInputrequired, max:255
emailTextInputrequired, email, unique
phoneTextInputnullable, tel
passwordTextInputrequired (create), min:8

Auftraggeber-spezifische Felder

Sichtbar wenn role === 'requester':

Organisation

FeldTypBeschreibung
organization_nameTextInputName der Organisation
organization_typeSelectgovernment, healthcare, school, social_services, legal, other
billing_emailTextInputRechnungs-E-Mail

Rechnungsadresse

FeldTyp
billing_streetTextInput
billing_house_numberTextInput
billing_postal_codeTextInput
billing_cityTextInput

Sprachmittler-spezifische Felder

Sichtbar wenn role === 'interpreter':

Adresse

FeldTypValidierung
streetTextInputrequired
house_numberTextInputrequired
postal_codeTextInputrequired
cityTextInputrequired

Arbeitseinstellungen

FeldTypBeschreibung
max_distanceTextInput10-100 km
available_for_selectionToggleFür Auswahl verfügbar
notesTextareaInterne Notizen
working_hoursRepeaterArbeitszeiten pro Wochentag

Working Hours Struktur:

Repeater::make('working_hours')
->schema([
Select::make('day')
->options([
'monday' => 'Montag',
'tuesday' => 'Dienstag',
// ...
]),
TimePicker::make('start_time'),
TimePicker::make('end_time'),
])

Skills & Kategorien

FeldTypBeschreibung
language_skillsSelect (multiple)SystemLanguage Multi-Select
category_blacklistSelect (multiple)Kategorien, die nicht bedient werden

Finanzinformationen

FeldTypBeschreibung
tax_idTextInputSteuer-ID
bank_account_ownerTextInputKontoinhaber
ibanTextInputIBAN
bicTextInputBIC
billing_typeSelectAbrechnungsart

Code-Beispiel: Rollenbasiertes Formular

public static function form(Form $form): Form
{
return $form->schema([
Forms\Components\Section::make('Benutzerdaten')
->schema([
Forms\Components\Select::make('role')
->options([
'admin' => 'Administrator',
'requester' => 'Auftraggeber',
'interpreter' => 'Sprachmittler',
])
->required()
->live(), // Wichtig für reactive visibility

// Weitere Basisfelder...
]),

// Nur für Auftraggeber
Forms\Components\Section::make('Organisation')
->visible(fn (Get $get) => $get('role') === 'requester')
->schema([
Forms\Components\TextInput::make('organization_name')
->required(),
// ...
]),

// Nur für Sprachmittler
Forms\Components\Section::make('Arbeitseinstellungen')
->visible(fn (Get $get) => $get('role') === 'interpreter')
->schema([
Forms\Components\TextInput::make('max_distance')
->numeric()
->minValue(10)
->maxValue(100)
->suffix('km'),
// ...
]),
]);
}

Table-Konfiguration

Spalten

SpalteTypBeschreibung
nameTextColumnMit Anrede und E-Mail als Description
rolesBadgeColumnFarbcodiert nach Rolle
stateBadgeColumnFarbcodiert nach Status
email_verified_atIconColumn✓ wenn verifiziert
orders_countTextColumnAnzahl Aufträge
phoneTextColumnTelefonnummer
last_login_atTextColumnLetzter Login

State-Badges

Tables\Columns\TextColumn::make('state')
->badge()
->color(fn (string $state): string => match ($state) {
'requested' => 'warning',
'active' => 'success',
'rejected' => 'danger',
'deactivated' => 'gray',
})

Filter

FilterTypOptionen
stateSelectFilterRequested, Active, Rejected, Deactivated
roleSelectFilterAdmin, Requester, Interpreter

Actions

Einzel-Actions

ActionIconBeschreibung
vieweyeBenutzer anzeigen
editpencilBenutzer bearbeiten

Bulk Actions

ActionIconState-TransitionSichtbarkeit
activatecheck→ Activestate !== Active
deactivatex-mark→ Deactivatedstate === Active
rejectban→ Rejectedstate === Requested
deletetrash--

Header Actions

protected function getHeaderActions(): array
{
return [
ExportAction::make()
->exporter(UserExporter::class)
->formats([
ExportFormat::Xlsx,
ExportFormat::Csv,
]),
];
}

Relation Managers

NotificationPreferencesRelationManager

Zeigt und bearbeitet die Benachrichtigungs-Einstellungen des Benutzers.

SpalteTypBeschreibung
notification_typeTextColumnBenachrichtigungstyp
email_enabledToggleColumnE-Mail aktiviert
push_enabledToggleColumnPush aktiviert
database_enabledBadgeColumnImmer aktiv

LegalDocumentAcceptancesRelationManager

Zeigt akzeptierte Rechtstexte.

SpalteBeschreibung
legal_document.titleDokumenttitel
legal_document.versionVersion
accepted_atAkzeptiert am
ip_addressIP-Adresse
public static function getGlobalSearchResultTitle(Model $record): string
{
return $record->full_name;
}

public static function getGloballySearchableAttributes(): array
{
return ['first_name', 'last_name', 'email'];
}

Pages

PageBeschreibung
ListUsersÜbersichtstabelle
CreateUserBenutzer erstellen
ViewUserDetailansicht mit Relation Managers
EditUserBenutzer bearbeiten