spa() ->databaseNotifications() ->brandName(config('app.name', 'Pelican')) ->brandLogo(config('app.logo')) ->brandLogoHeight('2rem') ->favicon(config('app.favicon', '/pelican.ico')) ->topNavigation(fn () => auth()->user()->getCustomization(CustomizationKey::TopNavigation)) ->maxContentWidth(config('panel.filament.display-width', 'screen-2xl')) ->profile(EditProfile::class, false) ->userMenuItems([ 'profile' => fn (Action $action) => $action ->url(fn () => EditProfile::getUrl(panel: 'app')), ]) ->login(Login::class) ->passwordReset() ->multiFactorAuthentication([ AppAuthentication::make()->recoverable(), EmailAuthentication::make(), ]) ->requiresMultiFactorAuthentication(function () { /** @var ?User $user */ $user = auth()->user(); // TODO: get user, see https://github.com/filamentphp/filament/discussions/17695 if ($user) { $level = (int) config('panel.auth.2fa_required'); // Not required if ($level === 0) { return false; } // Only admins if ($level === 1) { return $user->isAdmin(); } // All users if ($level === 2) { return true; } } return false; }) ->middleware([ EncryptCookies::class, AddQueuedCookiesToResponse::class, StartSession::class, AuthenticateSession::class, ShareErrorsFromSession::class, VerifyCsrfToken::class, SubstituteBindings::class, DisableBladeIconComponents::class, DispatchServingFilamentEvent::class, LanguageMiddleware::class, ]) ->authMiddleware([ Authenticate::class, ]); } }