*/ public array $selectedAbilities = ['press-releases:read']; public ?string $plainTextToken = null; public ?string $notification = null; public ?string $eligibilityMessage = null; private const ABILITIES = [ 'press-releases:read' => 'Pressemitteilungen lesen', 'press-releases:write' => 'Pressemitteilungen erstellen und bearbeiten', 'press-release-images:write' => 'Bilder zu Pressemitteilungen verwalten', 'companies:read' => 'Firmendaten lesen', 'newsletter:subscribe' => 'Newsletter-Anmeldungen auslösen', ]; public function createToken(): void { $eligibility = app(ApiAccessEligibilityService::class); $denialReason = $eligibility->denialReason(auth()->user()); if ($denialReason !== null) { $this->plainTextToken = null; $this->eligibilityMessage = __($denialReason); return; } $validated = $this->validate([ 'tokenName' => ['required', 'string', 'max:80'], 'selectedAbilities' => ['required', 'array', 'min:1'], 'selectedAbilities.*' => ['required', 'string', Rule::in(array_keys(self::ABILITIES))], ]); $token = auth()->user()->createToken( $validated['tokenName'], $validated['selectedAbilities'], ); $this->plainTextToken = $token->plainTextToken; $this->notification = __('Token wurde erstellt. Bitte kopieren Sie ihn jetzt, er wird später nicht erneut angezeigt.'); $this->eligibilityMessage = null; $this->tokenName = ''; $this->selectedAbilities = ['press-releases:read']; } public function revokeToken(int $tokenId): void { auth()->user() ->tokens() ->whereKey($tokenId) ->delete(); $this->plainTextToken = null; $this->notification = __('Token wurde widerrufen.'); } public function with(): array { $eligibility = app(ApiAccessEligibilityService::class); $denialReason = $eligibility->denialReason(auth()->user()); return [ 'abilityOptions' => self::ABILITIES, 'canCreateApiToken' => $denialReason === null, 'apiTokenDenialReason' => $denialReason, 'tokens' => auth()->user() ->tokens() ->latest() ->get(['id', 'name', 'abilities', 'last_used_at', 'created_at']), ]; } }; ?>
{{-- ============== PAGE HEADER ============== --}} @if ($notification)
{{ $notification }}
@endif @if ($eligibilityMessage || $apiTokenDenialReason)
{{ $eligibilityMessage ?? $apiTokenDenialReason }}
@endif @if ($plainTextToken)
{{ __('Neuer Token') }} {{ __('Nur jetzt sichtbar') }}

{{ __('Bitte kopieren Sie ihn jetzt, er wird später nicht erneut angezeigt.') }}

{{-- Token-Anzeige: dunkler Hintergrund konstant in Light + Dark (deshalb panel-dark-2 statt --color-ink, das im Dark Mode hell wird). --}} {{ $plainTextToken }}
@endif {{-- ============== FORM-PANEL ============== --}}
{{ __('Neuen Token erstellen') }}

{{ __('Wählen Sie nur die Berechtigungen aus, die der jeweilige API-Client wirklich benötigt.') }}

{{ __('Name') }}
{{ __('Berechtigungen') }}
@foreach ($abilityOptions as $ability => $label) @endforeach
{{ __('Token erstellen') }}
{{-- ============== TABELLE ============== --}}
{{ __('Bestehende Tokens') }} {{ __(':count Einträge', ['count' => $tokens->count()]) }}
{{ __('Name') }} {{ __('Berechtigungen') }} {{ __('Erstellt') }} {{ __('Zuletzt genutzt') }} {{ __('Aktionen') }} @forelse ($tokens as $token) {{ $token->name }}
@foreach ($token->abilities ?? [] as $ability) {{ $ability }} @endforeach
{{ $token->created_at?->format('d.m.Y H:i') }} {{ $token->last_used_at?->format('d.m.Y H:i') ?? __('Nie') }} {{ __('Widerrufen') }}
@empty
{{ __('Keine API-Tokens vorhanden') }}

{{ __('Erstellen Sie erst dann einen Token, wenn eine konkrete API-Integration ihn benötigt.') }}

@endforelse