figma guide

Designing privacy request queue and case management UI in Figma: DSAR, erasure, objection, and SLA tracking

Design privacy request queue and case management UI in Figma with unified DSAR, erasure, and objection tickets, SLA timers, identity verification, and handoff for privacy ops teams.

Published
Updated
Aug 15, 2026
Read time
7 min
Level
Intermediate

Quick answer

A privacy request queue unifies DSAR, erasure, objection, restrict, and rectification tickets in one ops inbox with SLA timers, identity verification status, and assignee workflows. Design a case detail panel linking to the right user-facing flow, SLA countdown badges, bulk export for audits, and status sync back to the user’s portal. Start from the Figma guides hub and pair with DSAR portal, erasure, objection, proof of deletion, and Dev Mode handoff.


Who this is for

  • Product designers building internal privacy ops tools alongside user-facing rights portals.
  • DPOs and privacy analysts who need one queue instead of email + spreadsheets.
  • Engineering teams normalizing request types into a shared case model.

Privacy ops inbox (admin overview)

PrivacyOpsInbox — Acme App · 47 open cases · 6 SLA at risk
├── Header: DSAR 12 · Erasure 8 · Objection 5 · Rectify 4 · Restrict 3 · Other 15
├── Actions: [ Assign bulk ] [ Export open cases ] [ SLA report ] [ Templates ]
├── Tabs: All · My queue · Unassigned · At risk · Completed · Escalated
├── Sort: SLA due · Newest · Priority · Region · Request type
├── Row example:
│   PRQ-9921 · DSAR access · u_441 · EU · Due in 2d · Unassigned · Id verified ✅
│   PRQ-9920 · Erasure full · u_882 · UK · Due in 18d · Alex · Job 3/6 complete
│   PRQ-9919 · Objection analytics · u_771 · DE · Due in 28d · Pending LI review
└── Link: [Trust center](/designing-trust-center-and-security-documentation-ui-in-figma/) · [Compliance exports](/designing-compliance-exports-and-legal-hold-ui-in-figma/) · [ROPA](/designing-records-of-processing-activities-and-data-mapping-ui-in-figma/)
Column / elementPurpose
Request typeDSAR, erasure, objection, restrict, rectify, portability
SLA dueRegion-specific deadline (e.g., 30 days GDPR)
Identity statusVerified, pending, failed, escalated
AssigneePrivacy analyst or team queue
Linked jobsDeletion jobs, export jobs, review tasks

Verdict: Queues fail when each right type lives in a separate tool—unify intake, SLA, and audit in one case record.


Case detail panel

CaseDetail — PRQ-9921 · DSAR access · Status: In progress
├── Header: User u_441 · EU resident · Submitted via [DSAR portal](/designing-data-subject-access-request-and-gdpr-portal-ui-in-figma/) 2026-08-01
├── SLA: Due 2026-08-31 · 26 days remaining · Extension logged? No
├── Identity: Verified via passkey 2026-08-01 · [Re-verify if suspicious](/designing-suspicious-login-alerts-and-account-recovery-ui-in-figma/)
├── Request scope: Full export · Include billing? Yes · Exclude other users' data ✅
├── Timeline:
│   ├── 2026-08-01 · Created · auto_ack_sent
│   ├── 2026-08-02 · Assigned · analyst@acme.com
│   ├── 2026-08-05 · Export job started · job_exp_441
│   └── 2026-08-10 · Awaiting QA on redaction
├── Actions: [ Complete & deliver ] [ Request extension ] [ Deny with reason ] [ Merge duplicate ]
├── Internal notes: Thread for legal · @mention DPO
├── User comms: Template picker · Last sent: "We're preparing your export"
└── Related: [Portability UI](/designing-data-portability-and-machine-readable-export-ui-in-figma/) · [Audit trail](/designing-proof-of-deletion-and-audit-trail-ui-in-figma/)

One case ID (PRQ-*) should follow the request from intake to closure.


Request type routing

TypeUser entryOps primary actionCloses when
DSAR accessDSAR portalGenerate export + redactUser downloads bundle
ErasureErasure wizardOrchestrate deletion jobsReceipt issued
ObjectionPrivacy settingsLI review queueDecision sent
RestrictRectification flowApply processing freezeLift or erase
RectifyProfile / DSARCorrect fields + notifyUser confirms
PortabilityDSAR or dedicatedMachine-readable exportDownload delivered
Withdraw consentConsent adminDownstream delete jobsMarketing/analytics stopped

Design one inbox filter per type but shared case chrome (SLA, identity, notes, audit).


SLA and extension UI

SLAWidget — PRQ-9921 · GDPR 30-day · Due 2026-08-31
├── Visual: Progress ring · Green >7d · Amber 3–7d · Red <3d
├── At-risk banner (inbox): "6 cases due within 72 hours"
├── Extension modal:
│   ├── Reason: Complex request · Third-party data · Legal review
│   ├── New due date: +30 days max per policy
│   ├── User notification: Required template · Plain language reason
│   ├── Approval: DPO sign-off if >14 day extension
│   └── Audit: extension_id · logged immutably
├── Deny path: Only when identity fails or manifestly unfounded · Link appeal copy
└── Region presets: EU 30d · UK 30d · CCPA 45d · Configurable in admin

SLA badges must appear in inbox list and case header—not buried in settings.


Identity verification gate

IdentityGate — PRQ-9920 · Erasure · Identity: Pending
├── Block ops actions until: Verified OR manual override with legal approval
├── Methods shown: Passkey ✅ · Email OTP · ID upload (high risk)
├── Failed verification: 3 attempts · Lock case · [Suspicious login](/designing-suspicious-login-alerts-and-account-recovery-ui-in-figma/) link
├── Manual override: Upload ticket · Manager approval · Audit reason required
├── User message: "Verify identity to continue" · Deep link to [email OTP](/designing-email-verification-and-otp-ui-in-figma/)
└── Never: Fulfill erasure on unverified email-only request for high-risk scopes

Erasure and full DSAR exports must not proceed without verified identity.


Duplicate and merge handling

MergeCases — PRQ-9918 + PRQ-9915 · Same user · Both DSAR access · 2h apart
├── Detect: Same user_id + type within 24h · Suggest merge banner
├── Merge preview: Keep earliest SLA · Combine notes · Close duplicate as merged_into
├── User sees: One portal status · One case ID
└── Audit: merge_event · both IDs preserved in trail

Duplicate requests are common after anxious refresh clicks—merge without resetting SLA unfairly.


User portal status sync

UserPortalStatus — "Your request PRQ-9921"
├── Mirror ops status: Received → In progress → Completed
├── Do not expose: Internal assignee names · Legal notes · Deny drafts
├── Messages: Pulled from approved templates only
├── Links: Download when ready · [Objection decision letter](/designing-objection-and-restrict-processing-ui-in-figma/) · [Deletion tracker](/designing-proof-of-deletion-and-audit-trail-ui-in-figma/)
└── Email parity: Same status text as portal · Unsubscribe not applicable to transactional

Ops case status and user portal must stay in sync—single source of truth.


Reporting and export

PrivacyOpsReports — Last 30 days
├── Metrics: Median time to complete · SLA breach count · By type · By region
├── Charts: Open vs closed · At-risk trend
├── Export: CSV for leadership · [Compliance bundle](/designing-compliance-exports-and-legal-hold-ui-in-figma/) for audits
├── Drill-down: Click metric → filtered inbox
└── Link [posture dashboard](/designing-security-posture-dashboard-and-compliance-checklist-ui-in-figma/) for exec summary

Handoff checklist (Dev Mode)

  • PrivacyCase — case_id, type, user_id, region, status, sla_due_at, assignee_id, created_at, closed_at.
  • CaseTimeline — event_type, timestamp, actor, note, linked_job_id.
  • IdentityVerification — case_id, method, status, verified_at, override_reason.
  • SLAExtension — case_id, old_due, new_due, reason, user_notified_at, approver_id.
  • CaseMerge — primary_id, merged_id, merged_at.
  • UserStatusSync — case_id, public_status, public_message, artifact_url.
  • Accessibility — SLA color + text label; sortable table headers; keyboard row actions.

Common mistakes

MistakeWhy it hurtsFix
Separate queues per rightMissed SLAsUnified inbox + type filter
No identity gateFraudulent erasureBlock until verified
SLA only in calendarBreaches surpriseIn-list countdown badges
Internal notes visible to userTrust breakStrict public vs internal fields
Reset SLA on duplicateUnfair delayMerge cases, keep earliest due
Complete without artifactEmpty closureRequire export/receipt/denial letter
No extension user noticeArt. 12 violationTemplate + audit on extend
Email-only ops workflowNo audit trailAll actions in case timeline

  1. Define case model covering all rights types from privacy settings entry points.
  2. Design ops inbox with SLA badges, filters, and bulk assign.
  3. Design case detail with timeline, identity gate, and type-specific actions.
  4. Wire user portal (DSAR portal) to case public_status.
  5. Add extension and deny flows with required user notifications.
  6. Build reporting for DPO reviews and compliance exports.
  7. Test end-to-end from user submit → ops complete → portal download in Dev Mode.

FAQ

One queue for consumer and B2B?

Use separate inboxes or workspaces when employee DSAR differs from customer rights—same case model, different policies.

Objection cases open LI review subtasks—surface LIA link and competing grounds checklist in case detail.

Erasure case vs deletion jobs?

Case tracks SLA and user comms; deletion jobs track technical completion—link job IDs in timeline.

CCPA vs GDPR SLA?

Configure region presets in admin—do not hardcode one deadline in UI copy.

Escalated tab + @DPO mention + freeze auto-complete until legal clears deny/extension.


Next steps

Share on X

§ Keep reading

Related guides.