diff --git a/app/Filament/Resources/Workspaces/WorkspaceResource.php b/app/Filament/Resources/Workspaces/WorkspaceResource.php index 7bd5576..e2e268e 100644 --- a/app/Filament/Resources/Workspaces/WorkspaceResource.php +++ b/app/Filament/Resources/Workspaces/WorkspaceResource.php @@ -15,14 +15,14 @@ class WorkspaceResource extends Resource { - protected static bool $isDiscovered = false; - protected static ?string $model = Workspace::class; protected static bool $isScopedToTenant = false; protected static ?string $recordTitleAttribute = 'name'; + protected static bool $shouldRegisterNavigation = false; + protected static string|BackedEnum|null $navigationIcon = 'heroicon-o-squares-2x2'; protected static string|UnitEnum|null $navigationGroup = 'Settings'; diff --git a/app/Http/Middleware/EnsureWorkspaceSelected.php b/app/Http/Middleware/EnsureWorkspaceSelected.php index 8b1e618..b904ff7 100644 --- a/app/Http/Middleware/EnsureWorkspaceSelected.php +++ b/app/Http/Middleware/EnsureWorkspaceSelected.php @@ -32,10 +32,6 @@ public function handle(Request $request, Closure $next): Response return $next($request); } - if (str_starts_with($path, '/admin/workspaces')) { - return $next($request); - } - if (in_array($path, ['/admin/no-access', '/admin/choose-workspace'], true)) { return $next($request); } diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index 2e9c599..7825e37 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -8,7 +8,6 @@ use App\Filament\Pages\NoAccess; use App\Filament\Pages\Tenancy\RegisterTenant; use App\Filament\Pages\TenantDashboard; -use App\Filament\Resources\Workspaces\WorkspaceResource; use App\Models\Tenant; use App\Support\Middleware\DenyNonMemberTenantAccess; use Filament\Facades\Filament; @@ -40,7 +39,6 @@ public function panel(Panel $panel): Panel ->path('admin') ->login(Login::class) ->authenticatedRoutes(function (Panel $panel): void { - WorkspaceResource::registerRoutes($panel); ChooseWorkspace::registerRoutes($panel); ChooseTenant::registerRoutes($panel); NoAccess::registerRoutes($panel); diff --git a/app/Support/Middleware/EnsureFilamentTenantSelected.php b/app/Support/Middleware/EnsureFilamentTenantSelected.php index 246bd4c..61e58eb 100644 --- a/app/Support/Middleware/EnsureFilamentTenantSelected.php +++ b/app/Support/Middleware/EnsureFilamentTenantSelected.php @@ -40,7 +40,6 @@ public function handle(Request $request, Closure $next): Response } $tenantParameter = $request->route()->parameter('tenant'); - $tenant = $panel->getTenant($tenantParameter); if (! $tenant instanceof Tenant) { @@ -73,7 +72,6 @@ public function handle(Request $request, Closure $next): Response } Filament::setTenant($tenant, true); - $this->configureNavigationForRequest($panel); return $next($request); diff --git a/app/Support/Workspaces/WorkspaceContext.php b/app/Support/Workspaces/WorkspaceContext.php index 6ed0554..b927f3c 100644 --- a/app/Support/Workspaces/WorkspaceContext.php +++ b/app/Support/Workspaces/WorkspaceContext.php @@ -88,6 +88,10 @@ public function resolveInitialWorkspaceFor(User $user, ?Request $request = null) if (! $workspace instanceof Workspace || ! $this->isWorkspaceSelectable($workspace) || ! $this->isMember($user, $workspace)) { $user->forceFill(['last_workspace_id' => null])->save(); + } else { + $session->put(self::SESSION_KEY, (int) $workspace->getKey()); + + return $workspace; } } diff --git a/resources/views/filament/pages/choose-tenant.blade.php b/resources/views/filament/pages/choose-tenant.blade.php index 4c16619..3a7efea 100644 --- a/resources/views/filament/pages/choose-tenant.blade.php +++ b/resources/views/filament/pages/choose-tenant.blade.php @@ -54,7 +54,6 @@ class="cursor-pointer rounded-lg border border-gray-200 p-4 dark:border-gray-800
@csrf -
{{ $tenant->name }}
diff --git a/routes/web.php b/routes/web.php index 00df6b5..9b90ef0 100644 --- a/routes/web.php +++ b/routes/web.php @@ -26,7 +26,6 @@ Route::get('/admin/consent/start', TenantOnboardingController::class) ->name('admin.consent.start'); - // Panel root override: keep the app's workspace-first flow. // Avoid Filament's tenancy root redirect which otherwise sends users to /admin/register-tenant // when no default tenant can be resolved. @@ -50,7 +49,6 @@ return redirect()->to('/admin/choose-tenant'); }) ->name('admin.home'); - // Fallback route: Filament's layout generates this URL when tenancy registration is enabled. // In this app, package route registration may not always define it early enough, which breaks // rendering on tenant-scoped routes. @@ -125,7 +123,6 @@ Route::middleware(['web', 'auth', 'ensure-correct-guard:web', 'ensure-workspace-selected']) ->post('/admin/select-tenant', SelectTenantController::class) ->name('admin.select-tenant'); - Route::bind('workspace', function (string $value): Workspace { /** @var WorkspaceResolver $resolver */ $resolver = app(WorkspaceResolver::class); @@ -140,15 +137,15 @@ Route::middleware(['web', 'auth', 'ensure-workspace-member']) ->prefix('/admin/w/{workspace}') ->group(function (): void { - Route::get('/', fn () => redirect('/admin/tenants')) + Route::get('/', fn () => redirect('/admin/choose-tenant')) ->name('admin.workspace.home'); Route::get('/ping', fn () => response()->noContent())->name('admin.workspace.ping'); - Route::get('/managed-tenants', fn () => redirect('/admin/tenants')) + Route::get('/managed-tenants', fn () => redirect('/admin/choose-tenant')) ->name('admin.workspace.managed-tenants.index'); - Route::get('/managed-tenants/onboarding', fn () => redirect('/admin/tenants/create')) + Route::get('/managed-tenants/onboarding', fn () => redirect('/admin/register-tenant')) ->name('admin.workspace.managed-tenants.onboarding'); });