feat(admin): form approval workflow before publishing
Nobody has claimed this yet.
- Dominant language
- HTML
- Stars
- 33
- Forks
- 104
- Avg merge
- 12h 3m
- Merged PRs (30d)
- 10
Description
Summary
Require an explicit admin approval step before a form built in the admin UI becomes available for public submission. Authors compose drafts, designated approvers review and publish (or send back with comments), and an audit trail captures every state transition.
Requirements
- Form lifecycle states: `draft` → `in_review` → `published` (+ `changes_requested`, `archived`)
- Submit-for-review action available to form authors
- Approval queue view in the admin (`/forms/queue` or similar) listing forms awaiting review
- Approve / request-changes actions, both gated by a new policy (e.g., `canApproveForms` — likely super_admin only)
- Reviewers can leave a comment when requesting changes; comment surfaces to the author
- Each state transition writes to `audit_log` with actor, before-state, after-state, and any comment
- Author cannot approve their own form (self-promotion guard analogous to PATCH role)
- Published forms cannot be edited in place — editing creates a new draft revision that must be re-approved
Context
Form misconfiguration (wrong required fields, leaky PII collection, broken submit URL) is a real failure mode once forms drive event registration and surveys. A required-approval gate gives the leadership team a check before anything lands on the public site.
This depends on #1974 (the form builder integration) being in place so there's something to approve in the first place.
Implementation Notes
- The state machine can live on the `forms` table as a status enum + a small `form_reviews` table for the comment/transition history.
- The audit_log entries pattern follows the existing merge / unmerge / role-change conventions on `/admin/users/*`.
- Consider whether "approve" requires two approvers (review by one, publish by another) — probably overkill for v1; single approver per form.
- Edit-after-publish creates a draft revision — model this as a new row pointing back to the published form via `parent_form_id`, or as a versioned `form_revisions` table; pick whichever fits the builder library's schema model best.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing the existing merge, unmerge, and role-change audit conventions under /admin/users/*, then confirm the form builder integration from #1974 and its forms schema. Done means authors can submit drafts, authorized reviewers can approve or request changes with comments, transitions are audited, self-approval is blocked, and published edits require re-approval.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- html
- Domain
- authorization, databases, full-stack
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 30/100