user(); if (! $user instanceof User) { abort(403); } if (! $user->tenantMemberships()->exists()) { abort(404); } $this->tenant = ManagedTenantContext::archivedTenant(); if (! $this->tenant instanceof Tenant) { abort(404); } /** @var CapabilityResolver $resolver */ $resolver = app(CapabilityResolver::class); if (! $resolver->isMember($user, $this->tenant)) { abort(404); } if (! $resolver->can($user, $this->tenant, Capabilities::TENANT_MANAGED_TENANTS_VIEW)) { abort(403); } } /** * @return array */ protected function getHeaderActions(): array { return [ Action::make('back_to_managed_tenants') ->label('Back to managed tenants') ->url(Index::getUrl()), UiEnforcement::forTableAction( Action::make('restore') ->label('Restore') ->icon('heroicon-o-arrow-path') ->action(function (): void { $tenant = $this->tenant; if (! $tenant instanceof Tenant) { abort(404); } $tenant->restore(); $tenant->refresh(); ManagedTenantContext::setCurrentTenant($tenant); ManagedTenantContext::clearArchivedTenant(); Notification::make() ->title('Managed tenant restored') ->success() ->send(); $this->redirect(Current::getUrl()); }), fn () => $this->tenant, ) ->requireCapability(Capabilities::TENANT_MANAGED_TENANTS_RESTORE) ->destructive() ->apply(), UiEnforcement::forTableAction( Action::make('force_delete') ->label('Force delete') ->icon('heroicon-o-trash') ->color('danger') ->action(function (): void { $tenant = $this->tenant; if (! $tenant instanceof Tenant) { abort(404); } $tenant->forceDelete(); ManagedTenantContext::clear(); Notification::make() ->title('Managed tenant deleted') ->success() ->send(); $this->redirect(Index::getUrl()); }), fn () => $this->tenant, ) ->requireCapability(Capabilities::TENANT_MANAGED_TENANTS_FORCE_DELETE) ->destructive() ->apply(), ]; } }