admin
fd7107290a
Bill approvals: admins-only mark-paid + DB guard
...
Restrict marking a bill paid to admins only, per requirement.
- BillDetailPage: gate Mark Paid / Mark Unpaid on useAuth().isAdmin
(was only hidden in board view).
- BillApprovalsPage: gate Print Checks (which sets bills to paid) on isAdmin.
- Migration: BEFORE INSERT/UPDATE trigger enforce_admin_marks_bill_paid()
rejects the transition into 'paid' for authenticated non-admins. Service-role
/ system contexts (auth.uid() null: buildium-sync, accounting triggers,
autopay) remain allowed. Verified: admin allowed, non-admin blocked (23514).
Note: the approver column showing "None" in production is a stale-deploy
issue — the DB column was renamed vendor_name->approver_name (Jun 4) but
prod still ran code querying vendor_name. Deploying current main resolves it.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-07 12:28:03 -04:00
..
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:19:26 -04:00
2026-06-04 17:17:05 -04:00
2026-06-01 20:19:26 -04:00
2026-06-01 20:57:01 -04:00
2026-06-01 21:36:55 -04:00
2026-06-01 21:41:51 -04:00
2026-06-01 22:39:07 -04:00
2026-06-01 23:06:00 -04:00
2026-06-01 23:33:09 -04:00
2026-06-01 23:55:18 -04:00
2026-06-02 01:08:37 -04:00
2026-06-02 01:08:37 -04:00
2026-06-02 01:16:58 -04:00
2026-06-02 02:14:25 -04:00
2026-06-04 10:01:18 -04:00
2026-06-04 10:01:18 -04:00
2026-06-04 10:01:18 -04:00
2026-06-04 10:01:18 -04:00
2026-06-04 10:01:18 -04:00
2026-06-04 10:01:18 -04:00
2026-06-04 18:17:39 -04:00
2026-06-04 12:30:44 -04:00
2026-06-04 12:30:44 -04:00
2026-06-04 13:00:41 -04:00
2026-06-04 18:57:32 -04:00
2026-06-04 13:00:41 -04:00
2026-06-04 13:38:50 -04:00
2026-06-04 17:17:05 -04:00
2026-06-04 17:17:05 -04:00
2026-06-04 17:17:05 -04:00
2026-06-04 17:17:05 -04:00
2026-06-04 20:54:09 -04:00
2026-06-07 12:28:03 -04:00