diff --git a/resources/views/filament/partials/context-bar.blade.php b/resources/views/filament/partials/context-bar.blade.php index 948f282..4814a60 100644 --- a/resources/views/filament/partials/context-bar.blade.php +++ b/resources/views/filament/partials/context-bar.blade.php @@ -2,6 +2,9 @@ use App\Filament\Pages\ChooseWorkspace; use App\Models\Tenant; use App\Models\User; + use App\Models\WorkspaceMembership; + use App\Services\Auth\WorkspaceRoleCapabilityMap; + use App\Support\Auth\Capabilities; use App\Support\Workspaces\WorkspaceContext; use Filament\Facades\Filament; @@ -12,9 +15,29 @@ $user = auth()->user(); + $canSeeAllWorkspaceTenants = false; + if ($user instanceof User && $workspace) { + $roles = WorkspaceRoleCapabilityMap::rolesWithCapability(Capabilities::WORKSPACE_MEMBERSHIP_MANAGE); + + $canSeeAllWorkspaceTenants = WorkspaceMembership::query() + ->where('workspace_id', (int) $workspace->getKey()) + ->where('user_id', (int) $user->getKey()) + ->whereIn('role', $roles) + ->exists(); + } + $tenants = collect(); - if ($user instanceof User) { - $tenants = collect($user->getTenants(Filament::getCurrentOrDefaultPanel())); + if ($user instanceof User && $workspace) { + if ($canSeeAllWorkspaceTenants) { + $tenants = Tenant::query() + ->where('workspace_id', (int) $workspace->getKey()) + ->orderBy('name') + ->get(); + } else { + $tenants = collect($user->getTenants(Filament::getCurrentOrDefaultPanel())) + ->filter(fn ($tenant): bool => $tenant instanceof Tenant && (int) $tenant->workspace_id === (int) $workspace->getKey()) + ->values(); + } } $currentTenant = Filament::getTenant(); @@ -25,41 +48,72 @@ @endphp