Approval is a policy boundary
Approval workflows protect high-impact actions by separating preparation from authorization. A robust workflow defines who can submit, who can approve, whether the same person is forbidden from both, how many approvals are required, what happens when data changes, and which version of the transaction was actually approved.
Model maker-checker rules explicitly
- Store maker identity and transaction version at submission.
- Evaluate approver permission, organizational scope, limits, and segregation-of-duties at approval time.
- Editing material fields after approval should invalidate prior approvals or create a new version.
- Use an immutable approval event history rather than only current status.
- The final execution step must verify that the approval set still matches the command being executed.
Decision path before authorization
Submission freezes an approval version; approvers are evaluated against that version, and execution occurs only when the policy is fully satisfied.
Maker-checker authorization decision
Submission freezes an approval version; approvers are evaluated against that version, and execution occurs only when the policy is fully satisfied.
A dual-control payment example
Approval loopholes to close
Workflow-policy checklist
- Define submission, rejection, cancellation, expiry, and approval transitions.
- Version the data being approved.
- Apply SoD and limits server-side.
- Record every approval decision as an immutable event.
- Revalidate policy immediately before execution.
