Skip to content

Approvals inbox detail drawer unconditionally renders a "Raw data (JSON)" panel — exposes hidden: true fields, internal ids and audit columns to business approvers #5553

Description

@os-zhuang

Moved from objectstack-ai/objectstack#10734 (filed there in Chinese by @baozhoutao, MEMBER, from a real EHR deployment on @objectstack/* 17.1.0; transfer unavailable in this tooling, rebuilt per file-at-destination — the renderer ships from this repo, @objectstack/console dist is a generated artifact of it). Original card retains the full report and repro; summary below.

Defect

In the Approvals center (/_console/apps/<app>/system/approvals, also the setup inbox route), opening any approval request shows a collapsible panel 「原始数据(JSON)」/ "Raw data (JSON)" (with a copy button) between the activity feed and the action buttons. Expanded, it renders the submitted record's complete raw row JSON, including:

  • internal columns: id, created_by, updated_by, owner_id, organization_id, bare lookup ids;
  • fields the object's metadata explicitly declares hidden: true — the app author's visibility declaration is silently bypassed on the approver's path.

Appears for all request states (pending / approved). Render condition is only payload != null — no role check, no debug/feature flag (reporter grepped showRaw* / rawPayload / hideRawData / showPayload / approvals.* settings keys: zero hits). Data source: sys_approval_request.payload_json, written unconditionally by @objectstack/plugin-approvals. The app author has no legitimate config to remove it (field hidden, view columns, nav, permission sets, env vars all ineffective) — only dist patching or CSS injection.

Locator from the report: chunk ApprovalsInboxPage-*.js, i18n key rawData.

Expected

A business approver sees only decision-relevant business information (key fields, approval chain, activity, actions). The raw row JSON is an implementation detail and must not bypass declared field visibility.

Triage scope guidance

Minimal fix direction (reporter's own priority order): default to not rendering the panel for business approvers (dev-mode / platform-admin / explicit debug gating is acceptable), or at minimum trim the payload rendering by object metadata (drop hidden: true fields + internal audit/pk columns). ⛔ Adding a new system/app-level config key (e.g. approvals.showRawPayload) is new public surface — propose it in the report if you believe it is needed, do not implement without a ruling.

Server-side residual (the payload itself still reaches the client unfiltered regardless of this panel) is tracked separately in the objectstack repo — this card is the UI half only.

Screenshots exist in the source project (private); see the original card for contact.

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingdomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatpm:dispatched

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions