*/ 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']), ]; } }; ?>
{{ __('API-Tokens') }} {{ __('Erstellen und widerrufen Sie persönliche Tokens für die neue API v1.') }}
{{ __('API-Dokumentation') }}
@if($notification) {{ $notification }} @endif @if($eligibilityMessage || $apiTokenDenialReason) {{ $eligibilityMessage ?? $apiTokenDenialReason }} @endif @if($plainTextToken)
{{ __('Neuer Token') }} {{ $plainTextToken }}
@endif
{{ __('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') }}
{{ __('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