false, ]; } public function mount(Workspace $workspace): void { $this->workspace = $workspace; } /** * @return Collection */ public function getTenants(): Collection { $user = auth()->user(); if (! $user instanceof User) { return ManagedEnvironment::query()->whereRaw('1 = 0')->get(); } $tenantIds = $user->tenantMemberships() ->pluck('managed_environment_id'); return ManagedEnvironment::query() ->withTrashed() ->whereIn('id', $tenantIds) ->where('workspace_id', $this->workspace->getKey()) ->orderBy('name') ->get() ->filter(function (ManagedEnvironment $tenant) use ($user): bool { return app(TenantOperabilityService::class)->outcomeFor( tenant: $tenant, question: TenantOperabilityQuestion::AdministrativeDiscoverability, actor: $user, workspaceId: app(WorkspaceContext::class)->currentWorkspaceId(request()), lane: TenantInteractionLane::AdministrativeManagement, )->allowed; }) ->values(); } public function goToChooseTenant(): void { $this->redirect(route('admin.workspace.managed-tenants.index', ['workspace' => $this->workspace])); } public function openTenant(int $tenantId): void { $user = auth()->user(); if (! $user instanceof User) { abort(403); } $tenant = ManagedEnvironment::query() ->withTrashed() ->where('workspace_id', $this->workspace->getKey()) ->whereKey($tenantId) ->first(); if (! $tenant instanceof ManagedEnvironment) { abort(404); } if (! $user->canAccessTenant($tenant)) { abort(404); } $this->redirect( \App\Filament\Pages\TenantDashboard::getUrl(tenant: $tenant) ); } }