Agent Visibility in Team Workspaces

Last updated April 21, 2026

Agent Visibility in Team Workspaces

When an agency has more than one person, each agent should see their own pipeline — not the whole agency's. Owners and admins still see everything so they can manage the team, but agents get a focused view of just their trips, tasks, leads, and commissions.

This article explains exactly what each role sees, how "unassigned" records behave, and where the rules are enforced.

Who sees what, at a glance

RoleTrips / Tasks / LeadsBookings, Invoices, PaymentsCommissionsTeam payouts
OwnerAll in workspaceAll in workspaceAll in workspaceAll
AdminAll in workspaceAll in workspaceAll in workspaceAll
AssistantAll in workspaceAll in workspaceAll in workspaceAll
AgentOnly trips assigned to them + unassignedOnly linked to their tripsOnly tied to their bookingsOnly their own
Solo owner (one-person workspace)Everything, alwaysEverythingEverythingN/A

"Unassigned" means the assigned_to field on a trip is empty. Unassigned trips stay visible to every agent so the team can pick them up — this is how lead triage and the shared inbox work.

What this affects

Role-based scoping applies everywhere the data is agent-specific:

  • Dashboard — active trip count, upcoming tasks, recent payments, revenue widgets
  • Trips list and calendar
  • Tasks and the task panel on trip detail
  • Clients (via the trips they're on)
  • Leads — agents see leads assigned to them or unassigned
  • Proposals, itineraries, invoices, payments
  • Inbox — email threads assigned to the agent plus unlinked inbound emails so triage still works
  • Commissions — only tied to bookings on the agent's trips
  • Agent payout batches — an agent sees only their own pay cycles

Reports and the agency-wide analytics page remain owner/admin only.

What agents do not see

An agent in a team workspace does not see:

  • Other agents' trips, tasks, leads, clients, bookings, proposals, invoices, or payments
  • Workspace-wide totals that include other agents' activity
  • Other agents' commission entries or payouts
  • Other agents' email threads (unless assigned to them or unlinked)

Public share links (proposal URLs, published itinerary tokens, client portal links) work independently of role — anyone with the link can view them as intended.

Unassigned records

Records with no assigned_to stay visible to every agent. That covers:

  • A trip created from an imported lead before anyone's claimed it
  • An inbound email that hasn't been linked to a trip yet
  • Tasks created on an unassigned trip

This matches how the inbox triage page and the leads queue already work. Once an agent claims a trip (sets assigned_to), it disappears from other agents' views.

How it works under the hood

Agent visibility is enforced at two layers:

  1. Application layer — the dashboard pre-filters widgets to the current agent's trip IDs, so queries stay small and fast.
  2. Database layer (RLS) — Postgres row-level-security policies on every agent-scoped table block anything the app layer misses. Even a future server-action bug that forgets to filter by assigned_to cannot leak another agent's data.

The DB-layer enforcement was added in migration 256_role_aware_agent_rls.sql. Tables covered:

trips, tasks, leads, email_threads, bookings, payments, invoices, proposals_v2, itineraries, promotion_applications, inbound_emails, commission_entries, commission_submissions, agent_payout_batches.

Reassigning a trip

When an owner or admin reassigns a trip from one agent to another, every agent-scoped record linked to that trip (bookings, tasks, invoices, payments, commissions) follows automatically — there's no separate reassignment step per record.

The previous agent loses visibility into the trip the moment the new assigned_to is saved. The new agent sees it on their next page load.

For owners who also take trips

Owners who want to work their own pipeline can set assigned_to = themselves on their trips. Their role still gives them full-workspace visibility, so the assigned_to field acts as a personal filter for the owner's dashboard without hiding anything from them.

Questions this answers

"Why is my dashboard showing numbers different from my colleague's?" You're each seeing your own pipeline. That's by design.

"I can see an unassigned trip — should I?" Yes. Unassigned trips are shared so the team can claim them. Once you claim it (or someone else does), it becomes scoped to that agent.

"I was made an admin — do I see more now?" Yes. Admins see the full workspace. If you're an admin and a widget still looks scoped, log out and back in so your session picks up the new role.

"Can an agent accidentally edit another agent's trip?" Visibility prevents reading. Write permissions (insert/update/delete) are governed separately and may still be workspace-wide in some tables — tightening those is a planned follow-up.

Ready To Launch

Bring every trip, payment, and client touchpoint into one fused brand experience.

JourneyFuse is ready to sell, service, and scale with you now. No waitlist. No stitched-together stack. Just one sharp platform your team can actually run on.

JourneyFuse branding artboard
JourneyFuse
JourneyFuse

Bold branding outside. Serious operating system inside.