- Shipped
- July 5, 2026 at 6:37 PM UTC
- Author
- Kamo
- Commit
- dd627e1
A borrower is a plain org Member with no operator LOS rights; they may act on the ONE application they are a party to — and only that one. Layered guard: operator gate first, else a fail-closed loan-party check (isMemberPartyToApp). MortgageAppController: - **************** overloads applied to get, all 23 per-app write endpoints, and the 3 repeating-section helpers. - list: operators see the org pipeline; a borrower sees only owned apps. - create: operator takes app (incl. from-lead); a borrower self-creates their own (ownership-stamped) — the KamoMLOS reward-gate mint. - delete: operator suspend-right OR the owning borrower; lookups: any authenticated session (reference enums the intake needs); journey stays operator-only. MortgageProgramController: closed a pre-existing IDOR on setPersona/setSelectedProgram (org-only check) — now operator-LOS-role OR loan-party. Operators unchanged; borrowers owner-scoped; cross-borrower IDOR closed (D52).