Outbound security (wires & invoice-related outbound)

Automated rules (for example VPN on the Secure wire channel) set a durable suspension on the user record. Use Enable outbound block to apply the same hold manually when policy is broken on wires or invoice-funded outbound. Use Restore outbound access to lift the hold. This is not session-based: clearing browser data does not remove the block.

@php $wsp = $wireTransferSecurityPolicy ?? [ 'vpn_enforcement_enabled' => true, 'location_validation_enabled' => true, 'wire_non_us_origin_block_enabled' => true, 'pending_session_overrides' => [], ]; $wirePendingOverrides = is_array($wsp['pending_session_overrides'] ?? null) ? $wsp['pending_session_overrides'] : []; @endphp

Wire transfer · location & VPN rules

Platform-wide switches for the Secure wire channel. When a rule is off, that check is skipped on wire submit (durable outbound holds and granular wire blocks still apply). Use Next-session bypass per user below to allow one signed-in session outside policy — it activates on their next magic-link sign-in and ends when they sign out.

@if ($errors->has('wire_security'))

{{ $errors->first('wire_security') }}

@endif
@csrf
@if ($errors->has('capability'))

{{ $errors->first('capability') }}

@endif

Governance by user (up to 100)

@forelse($outboundGovernanceUsers as $gu) @empty @endforelse
User Outbound status Actions

{{ $gu->email }}

{{ $gu->name }}

@if($gu->outbound_security_suspended) Blocked

{{ str_replace('_', ' ', (string) ($gu->outbound_security_reason ?? '')) }} · {{ $gu->outbound_security_suspended_at?->timezone(config('app.timezone'))->toDayDateTimeString() ?? '—' }}

@else Active @endif
@if($gu->outbound_security_suspended)
@csrf
@else
@csrf
@endif
No users in scope.

Next-session wire rule bypass (per user)

Queue a one-time bypass for the user's next signed-in session (after their next magic-link sign-in). Select which wire checks to skip. Durable outbound suspension and granular wire blocks are not bypassed.

@forelse($outboundGovernanceUsers as $gu) @php $pending = $wirePendingOverrides[(string) $gu->id] ?? null; $pendingScopes = is_array($pending['scopes'] ?? null) ? $pending['scopes'] : []; @endphp @empty @endforelse
User Pending bypass Grant / revoke

{{ $gu->email }}

{{ $gu->name }}

@if($pending) Queued for next sign-in

Skips: {{ implode(', ', $pendingScopes) }}

@else None @endif
@if($pending)
@csrf
@else
@csrf
@endif
No users in scope.

Granular workspace blocks (per user)

Independent of the outbound suspension above: pause specific rails for a profile. Wire — Secure wire channel. Invoices — approve, pay from mandate, operational payment requests. Withdraw earnings — mandate to linked reserve. Linked reserve top-up — add earnings to linked reserve. Uncheck all and save to clear blocks for that row.

@forelse($outboundGovernanceUsers as $gu) @empty @endforelse
User Wire Invoices Withdraw Top-up Actions

{{ $gu->email }}

{{ $gu->name }}

@csrf
No users in scope.
@if($outboundSuspendedUsers->isNotEmpty())

Suspended profiles (summary)

@endif