moffhub/maker-checker
Feature-complete maker-checker (four-eyes) approvals for Laravel. Add a trait to intercept model create/update/delete, or use the API for complex workflows: multi-level/role & user approvals, conditional rules, delegation, bulk ops, reminders/escalation, audit trail & export.
RequiresApproval) enables approvals for any model with minimal setup.MakerCheckerUserContract implementation is mandatory, adding a small upfront cost.RequiresApproval trait on 1–2 low-risk models (e.g., blog posts)./api/approvals/{request}) via Laravel Sanctum/Passport.if ($user->isAdmin())) to role-based approvals.withoutApprovalDo() for admin bypasses or seeders.ExecutableRequest classes.composer.json constraints.MakerCheckerUserContract aligns with existing RBAC (e.g., Spatie Permissions).MakerCheckerServiceProvider).Approved, Rejected).php artisan vendor:publish).MakerCheckerUserContract on the User model.RequiresApproval trait to critical models./approvals, /requests, etc.auth:sanctum).ExecutableRequest classes for domain-specific actions.Approved, Rejected, and Escalated events.MakerChecker facade changes).ExecutableRequest implementations.if ($payload['amount'] > 50000)).MakerCheckerUserContract implementations./api/approvals/bulk under load; optimize payload sizes.maker_checker_requests on status, created_at, and team_id.user->roles) if frequently queried.| Failure Scenario | Impact | Mitigation |
|---|---|---|
| Database lock timeout | Approval requests hang | Adjust lock_for in config; monitor long-running transactions. |
| Approver system outage | Requests stall | Implement escalation paths (e.g., auto-approve after 48h). |
| Corrupted audit trail | Compliance gaps | Regularly back up maker_checker_audit_logs. |
| Role misconfiguration | Invalid approvals granted | Unit test role-based approvals pre-deployment. |
| Bulk operation failure | Partial approvals | Use transactions for atomic bulk updates. |
RequiresApproval, MakerChecker facade).ExecutableRequest classes for domain logic.ExecutableRequest.How can I help you explore Laravel packages today?