Skip to content
Product

Automations inside custom portals: auth, roles, human-in-the-loop

Who can trigger what, what runs alone, and where a person must still approve

January 16, 2026
By Manweba

Portal automations look like convenience until the wrong role can bulk-export, auto-approve, or email every customer. Auth, authorization, and human-in-the-loop checkpoints are the product—not an afterthought bolted onto a Zap.

Identity before action

Every automation trigger carries the actor: user id, session, and tenant. Service accounts for machines are explicit and narrow. “The server did it” without an actor is how audits fail.

Authorize before enqueue

typescript
Loading code…

Roles that match real jobs

Map roles to verbs: view, operate, approve, administer. Avoid a single “power user” that can do everything because the UI was late. Permission checks belong on the server for every mutation—including ones started by automations.

Role verbs to insist on

  • View: read without mutating
  • Operate: run everyday jobs within a narrow blast radius
  • Approve: dual-control on irreversible or high-impact actions
  • Administer: change roles, policies, and automation wiring—not daily ops

Human-in-the-loop as a first-class state

Irreversible or high-blast-radius actions should enter an approval state with a dual-control option when needed. Show the actor what will happen: counts, destinations, templates. Approvals without previews are rubber stamps.

Approval card preview

tsx
Loading code…

Make automation legible

Surfaces should list what ran, who triggered it, what it changed, and how to undo when undo exists. Silent success is fine for low-risk jobs; silent failure is not. Prefer idempotent workers so retries do not double-charge or double-email.

Final thoughts

Portal automation is permissioned work with a clock. Authenticate the actor, authorize the verb, pause humans where blast radius is high, and leave an audit trail that support can read without spelunking logs.

Ready to build something this considered?