51 lines
1.6 KiB
PHP
51 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Responses;
|
|
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\RedirectResponse;
|
|
use Illuminate\Http\Request;
|
|
use Laravel\Fortify\Contracts\LoginResponse as LoginResponseContract;
|
|
|
|
/**
|
|
* Leitet Panel-User nach erfolgreichem Login je nach Rolle:
|
|
* - Admin/Editor → /dashboard (Admin-Bereich)
|
|
* - Customer → /admin/me (Mein Bereich)
|
|
*/
|
|
class RoleAwareLoginResponse implements LoginResponseContract
|
|
{
|
|
public function toResponse($request): RedirectResponse|JsonResponse
|
|
{
|
|
if ($request instanceof Request && $request->wantsJson()) {
|
|
return new JsonResponse('', 204);
|
|
}
|
|
|
|
$user = $request->user();
|
|
$intended = redirect()->intended();
|
|
|
|
if ($user?->canAccessAdmin()) {
|
|
return $intended->setTargetUrl(
|
|
$this->resolveTarget($intended->getTargetUrl(), route('dashboard'))
|
|
);
|
|
}
|
|
|
|
if ($user?->canAccessCustomer()) {
|
|
return $intended->setTargetUrl(
|
|
$this->resolveTarget($intended->getTargetUrl(), route('me.dashboard'))
|
|
);
|
|
}
|
|
|
|
return $intended->setTargetUrl(url('/'));
|
|
}
|
|
|
|
/**
|
|
* Übernimmt die Intended-URL nur, wenn sie nicht auf den Default-Home-Pfad zeigt.
|
|
*/
|
|
private function resolveTarget(string $intendedUrl, string $fallback): string
|
|
{
|
|
$homePath = (string) config('fortify.home', '/dashboard');
|
|
$intendedPath = parse_url($intendedUrl, PHP_URL_PATH) ?: '/';
|
|
|
|
return $intendedPath === $homePath || $intendedPath === '/' ? $fallback : $intendedUrl;
|
|
}
|
|
}
|