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(); } /** @var CapabilityResolver $resolver */ $resolver = app(CapabilityResolver::class); $tenants = ManagedEnvironment::query() ->withTrashed() ->where('workspace_id', $this->workspace->getKey()) ->orderBy('name') ->get(); $resolver->primeMemberships($user, $tenants->modelKeys()); return $tenants ->filter(function (ManagedEnvironment $tenant) use ($resolver, $user): bool { if (! $resolver->isMember($user, $tenant)) { return false; } 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) ); } }