Key changes Adds Entra OIDC redirect + callback endpoints under /auth/entra/* (token exchange only there). Upserts tenant users keyed by (entra_tenant_id = tid, entra_object_id = oid); regenerates session; never stores tokens. Blocks disabled / soft-deleted users with a generic error and safe logging. Membership-based post-login routing: 0 memberships → /admin/no-access 1 membership → tenant dashboard (via Filament URL helpers) >1 memberships → /admin/choose-tenant Adds Filament pages: /admin/choose-tenant (tenant selection + redirect) /admin/no-access (tenantless-safe) Both use simple layout to avoid tenant-required UI. Guards / tests Adds DbOnlyPagesDoNotMakeHttpRequestsTest to enforce DB-only render/hydration for: /admin/login, /admin/no-access, /admin/choose-tenant with Http::preventStrayRequests() Adds session separation smoke coverage to ensure tenant session doesn’t access system and vice versa. Runs: vendor/bin/sail artisan test --compact tests/Feature/Auth Co-authored-by: Ahmed Darrazi <ahmeddarrazi@MacBookPro.fritz.box> Reviewed-on: #76
37 lines
1.3 KiB
PHP
37 lines
1.3 KiB
PHP
<x-filament-panels::page.simple>
|
|
<div class="flex flex-col gap-6">
|
|
@if (session('error'))
|
|
<div class="rounded-md bg-red-50 p-4 text-sm text-red-800 dark:bg-red-950/30 dark:text-red-200">
|
|
{{ session('error') }}
|
|
</div>
|
|
@endif
|
|
|
|
@php
|
|
$isConfigured = filled(config('services.microsoft.client_id'))
|
|
&& filled(config('services.microsoft.client_secret'))
|
|
&& filled(config('services.microsoft.redirect'));
|
|
@endphp
|
|
|
|
@if (! $isConfigured)
|
|
<div class="rounded-md bg-amber-50 p-4 text-sm text-amber-900 dark:bg-amber-950/30 dark:text-amber-200">
|
|
Microsoft sign-in is not configured.
|
|
</div>
|
|
@endif
|
|
|
|
<div class="flex flex-col gap-3">
|
|
<x-filament::button
|
|
tag="a"
|
|
href="{{ route('auth.entra.redirect') }}"
|
|
:disabled="! $isConfigured"
|
|
color="primary"
|
|
>
|
|
Sign in with Microsoft
|
|
</x-filament::button>
|
|
|
|
<div class="text-center text-sm text-gray-500 dark:text-gray-400">
|
|
Tenant Admin access requires a tenant membership.
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</x-filament-panels::page.simple>
|