Implements specs 070–072 (workspace foundation, workspace-scoped tenant selection, managed-tenants workspace enforcement).
Highlights
- Adds Workspace + WorkspaceMembership models/migrations + middleware to persist/enforce current workspace context.
- Scopes tenant selection to the current workspace.
- Makes legacy `/admin/managed-tenants*` routes redirect into workspace-scoped URLs.
- Enforces tenant routes under `/admin/t/{tenant}` to 404 when workspace context is missing or mismatched.
- Fixes Filament page Blade wrappers so header actions render on choose-workspace / choose-tenant / no-access pages.
Verification
- Pint: `vendor/bin/sail bin pint --dirty`
- Tests: `vendor/bin/sail artisan test --compact tests/Feature/Guards/NoAdHocFilamentAuthPatternsTest.php tests/Feature/Workspaces tests/Feature/Filament/ChooseTenantIsWorkspaceScopedTest.php tests/Feature/Filament/ChooseTenantRequiresWorkspaceTest.php tests/Feature/Filament/TenantSwitcherUrlResolvesTenantTest.php tests/Feature/ManagedTenants tests/Feature/AdminNewRedirectTest.php`
Notes
- Filament v5 / Livewire v4 compatible.
- Panel provider registration stays in `bootstrap/providers.php` (Laravel 11+ rule).
- No new heavy frontend assets added.
Co-authored-by: Ahmed Darrazi <ahmeddarrazi@MacBookPro.fritz.box>
Reviewed-on: #85
33 lines
1.6 KiB
Markdown
33 lines
1.6 KiB
Markdown
# Plan — 072 Managed Tenants workspace context enforcement
|
|
|
|
## Tech
|
|
- Laravel 12
|
|
- Filament v5 + Livewire v4
|
|
- Pest v4
|
|
|
|
## Approach
|
|
1. Treat `/admin/w/{workspace}/...` as the portfolio / workspace entry space.
|
|
2. Move Managed Tenants list/onboarding UX to workspace-scoped routes.
|
|
3. Make `/admin/managed-tenants/*` legacy-only (redirect to the correct workspace-scoped URL).
|
|
4. Enforce workspace/tenant consistency for all `/admin/t/{tenant}` routes (deny-as-not-found on mismatch).
|
|
|
|
## Key decisions
|
|
- **Workspace is not Filament tenancy**; it remains session + middleware.
|
|
- Hard enforcement is implemented in middleware that runs on tenant-scoped routes.
|
|
- Prefer redirects over removing routes immediately, to avoid breaking deep links, but ensure they are no longer primary UX.
|
|
|
|
## Files (expected)
|
|
- `routes/web.php`
|
|
- `app/Providers/Filament/AdminPanelProvider.php`
|
|
- `app/Http/Middleware/EnsureWorkspaceSelected.php`
|
|
- `app/Support/Middleware/DenyNonMemberTenantAccess.php` (or `EnsureFilamentTenantSelected.php`, depending on existing enforcement location)
|
|
- `app/Filament/Pages/ManagedTenants/*` (legacy redirects / removal)
|
|
- New/updated workspace landing page under `app/Filament/Pages/Workspaces/*` (or equivalent)
|
|
- Pest tests in `tests/Feature/Routing/` or `tests/Feature/Filament/`
|
|
|
|
## Test plan
|
|
- Feature test: `/admin/managed-tenants` redirects to `/admin/w/{workspace}/managed-tenants` when workspace is selected.
|
|
- Feature test: `/admin/t/{tenant}` returns 404 when workspace context missing.
|
|
- Feature test: `/admin/t/{tenant}` returns 404 when tenant.workspace_id != current workspace.
|
|
- Optional: workspace landing lists only workspace tenants.
|