Thumbnail · the Folders tree, inherited vs. direct access (4:5)
The folder tree, showing where access is inherited versus granted directly.

Product Design · Permissions · 2025

Designing permissions people can actually trust

A file-organization feature that was really a permissions problem: surface inherited vs. directly-granted access without ever leaking gated information to someone who shouldn’t see it.

Problem

A migration with no other path forward

When Greenlight Guru acquired a company, one customer segment couldn’t migrate off their old product without a working Folders feature — full stop. It wasn’t a nice-to-have. It was the blocker standing between those customers and the product they’d already bought into.

And it wasn’t a simple file-organization feature. It needed a real permissions model behind it — one that could correctly surface inherited versus directly-granted access without ever leaking gated information to someone who shouldn’t see it.

Process

Learning OpenFGA under real pressure

I owned this end to end, design through frontend implementation, integrating with a permissions model (OpenFGA) I hadn’t worked with before. That meant learning how relationship-based permission structures actually connect while under real pressure to get it right — not in a sandbox.

When I hit a wall understanding how the permission graph should resolve visually, I leaned on AI to get unstuck and asked a lot of questions along the way, learning the technology as I went instead of stalling on it.

Before — flat, ambiguous access
Before
After — inherited vs. direct, made legible
After
Launch wasn’t the finish line.

I took the autonomy to keep going, writing and driving a set of follow-up stories: fixing drag-and-drop flicker through optimistic updates and cache syncing, adding move confirmations, restructuring the folder tree hierarchy, adding breadcrumbs. The difference between “shipped” and “actually good to use” lived in that follow-up work.

Surfacing inherited vs. direct access without ever leaking gated info to a lower-access viewer — that was the whole UX problem.

Technical depth

What the work actually involved

  • Integrated with OpenFGA (relationship-based access control) as a frontend consumer, not the backend owner.
  • Solved the specific UX problem of surfacing inherited vs. direct permissions without leaking gated info to lower-access viewers.
  • Post-launch performance and interaction fixes: optimistic UI updates, cache invalidation, and drag-and-drop reliability.

Outcome

Unblocked a hard customer migration that had no other path forward — and became the reference implementation the team still points to for permission-aware UI patterns.

Motion clip — optimistic drag-and-drop