Skip to content

Features Overview ​

This is the map of what Bouncer ships beyond the core "save through a draft" loop.

Admin UI ​

A self-contained admin interface at /admin/bouncer/bouncer — pending queue, side-by-side and inline diffs, approve / reject with reasons, filters by status / table / user, and clickable links to the source records and proposers.

→ Admin UI

Approval Workflow ​

The internal flow: how a save becomes a draft, how the queue is filtered on re-edits, the database schema, and the entity helpers that surface staleness and merge state.

→ Approval Workflow

3-Way Merge ​

When a proposal becomes stale because the source record changed independently, Bouncer auto-merges non-overlapping edits and surfaces real conflicts for manual resolution. Includes recipes for custom merge logic and using the ThreeWayMerge class directly.

→ 3-Way Merge

Advanced Patterns ​

Bypass callbacks (role-based, entity-based), conditional bouncer attachment, custom programmatic approval flows, status-change notifications, and dashboard widgets.

→ Advanced Patterns

AuditStash Integration ​

Pair Bouncer (logs the approval workflow) with cakephp-audit-stash (logs the data changes the approval applies) for a complete audit trail.

→ AuditStash Integration

Troubleshooting ​

The common "I expected this to be bounced and it wasn't" / "approval failed silently" / "validation rejected my draft" symptoms with their fixes.

→ Troubleshooting

Released under the MIT License.