1.9 KiB
1.9 KiB
Data Model: 106 — Required Permissions Sidebar Context Fix
Date: 2026-02-22 | Branch: 106-required-permissions-sidebar-context
Summary
No data model changes. This feature modifies middleware control flow only.
Entities Affected
None. No database tables, models, or relationships are created or modified.
State Transitions
| Component | Before | After |
|---|---|---|
EnsureFilamentTenantSelected middleware |
Always calls Filament::setTenant() when {tenant} route param present |
Checks workspace-scoped page allowlist first; skips setTenant() for matched pages |
Filament::getTenant() on Required Permissions page |
Returns resolved Tenant instance (triggers tenant sidebar) |
Returns null (triggers workspace sidebar) |
configureNavigationForRequest() on Required Permissions page |
Renders tenant-scoped sidebar | Renders workspace-scoped sidebar |
rememberLastTenantId() on Required Permissions page |
Called (updates session) | Skipped (no session side-effect) |
Middleware Decision Flow (After Fix)
Request arrives
├── /livewire/update?
│ └── Check referer against:
│ ├── /admin/operations/{run} (existing)
│ └── /admin/tenants/{tenant}/required-permissions (NEW)
│ └── Match → workspace nav, return
│
├── /admin/operations/{run} → workspace nav (existing)
├── /admin/operations → workspace nav (existing)
│
├── Route has {tenant} param?
│ ├── Authorization checks (all 8 — unchanged)
│ ├── Is workspace-scoped page? (NEW check)
│ │ ├── YES → configureNavigationForRequest() WITHOUT setTenant()
│ │ └── NO → Filament::setTenant() + rememberLastTenantId() + configureNavigation (existing)
│ └── return next
│
└── ... existing flow continues