Implementing an Editorial Approval Workflow in MODX Revolution 3
Learn how to implement a professional editorial workflow in MODX Revolution 3 using native versioning and ACLs to balance auditability with low operational overhead.
24 Mar 2026, 02:27 UTC

The Challenge: Balancing Auditability with Operational Overhead
When moving from a single-administrator site to a multi-author environment, the primary risk is the accidental publication of unreviewed content. While MODX Revolution allows for granular permissions, it does not provide a native "Approval Queue" out of the box. Teams often struggle to choose between lightweight internal tracking and heavy environment-based staging, especially when constrained by shared hosting or limited developer resources.
The goal is to create a gate where content can be drafted and reviewed without risking the live site, while maintaining a complete audit trail for rollbacks.
Comparing Editorial Workflow Strategies
Depending on your team size and hosting budget, one of these three patterns will fit your operational constraints.
| Strategy | Mechanism | Auditability | Approval Gate | Overhead |
|---|---|---|---|---|
| Native Versioning | System Settings | High (Diffs) | None (Informal) | Very Low |
| Status TV + ACL | Template Variables & Roles | Medium | Explicit (Role-based) | Low |
| Workspace Staging | Separate Environments | High | Strict (Deployment) | High |
Trade-off Analysis
- Native Versioning: Best for small teams who trust each other but need a "safety net." It tracks every change but doesn't stop an editor from hitting publish.
- Status TV + ACL: The ideal middle ground. It introduces a formal state (Draft → Review → Published) and uses Access Control Lists (ACLs) to ensure only senior editors can finalize the change.
- Workspace Staging: Necessary for enterprise sites. It isolates the entire site instance, but doubles your hosting costs and introduces complex synchronization tasks between staging and production.
Implementation: The Lightweight Approval Gate
For most sites on shared hosting, combining native versioning with a Status Template Variable (TV) provides the best balance of safety and performance. This guide assumes you are using MODX Revolution 3.x.
Step 1: Enable Core Versioning
First, ensure the system captures snapshots of every save. This allows you to compare changes and rollback if an approved version contains errors.
- Navigate to System Settings in the MODX Manager.
- Search for
resource_versioningand set it toYes. - Search for
resource_version_keepand set it to a reasonable number (e.g.,10) to prevent themodx_site_content_versiontable from growing indefinitely.
Step 2: Create the Status Gate
Create a Template Variable (TV) to track the editorial state. This acts as the visual indicator for reviewers.
- TV Name:
editorial_status - Input Type: Listbox
- Input Options:
Draft||Review||Published - Access: Assign to the relevant content templates.
Step 3: Restrict Publishing via ACL
To prevent junior editors from bypassing the review process, you must restrict the resource.publish permission.
- Go to Access Control → User Groups.
- Create an Editor group: Grant permissions to
resource.createandresource.edit, but denyresource.publish. - Create a Publisher group: Grant all permissions, including
resource.publish.
Step 4: Prevent Unreviewed Content from Rendering
Since a resource can be "Published" in MODX but still marked as "Draft" in your TV, add a check to your main layout snippet or chunk to prevent accidental leaks.
[[!If]]
[[!+tv.editorial_status]] == 'Published'
[[+content]]
<p>This content is currently under review and not yet available.</p>
[[/!If]]
Note: Setting cacheable to false for this check ensures that status changes are reflected immediately without a manual cache clear.
Validation and Testing
To verify the workflow is functioning as intended, perform the following checks:
- Permission Check: Log in as a user in the Editor group. Attempt to publish a resource; the action should be denied by the system.
- Audit Check: Save a resource three times with different content. Open the History tab of that resource and verify that three distinct versions exist with viewable diffs.
- Gate Check: Set a resource to
Reviewand publish it. Verify that the front-end displays the "under review" message rather than the content.
Limitations and Maintenance
This approach relies on Policy rather than Hard Code. If an administrator accidentally grants the resource.publish permission to the Editor group, the gate is bypassed. Additionally, monitor your database size; if you have thousands of resources being edited daily, the versioning table can grow rapidly. Periodically check the row count of modx_site_content_version and adjust resource_version_keep downward if storage becomes an issue.
Rollback Procedure
If a published version is found to be incorrect:
- Open the Resource in the Manager.
- Click the History tab.
- Select the last known-good version and click Restore.
- Save the resource to commit the rollback to the live site.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.