You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Auth0: issue an org_id claim (and optionally tier) on access tokens. The multi-tenant IDOR fix derives org from this claim; without it, /api/deals and /api/contacts return 403 for every user (fail-closed by design). Namespaced custom claims (https://…/org_id) are supported.
Set webhook secrets in prod: STRIPE_WEBHOOK_SECRET, TWILIO_AUTH_TOKEN, SENDGRID_WEBHOOK_VERIFICATION_KEY, PLAID_WEBHOOK_SECRET. Verifiers now fail closed (401) when unset (previously fail-open).
Ensure JWT_SECRET is set in every environment — validateConfig() now throws on boot if missing (insecure fallback removed).
Run the app under a non-owner DB role so RLS (migration 018) actually enforces — the table owner bypasses non-FORCEd policies. The per-request app.current_org_id GUC is wired via orgContextMiddleware.
Coordinate migrations 014–019 rollout — 014 sets prospects.org_id NOT NULL and backfills existing rows to a default "Unassigned" org.
Confirm organizations.subscription_tier → data-tier mapping matches product intent (dataTier entitlement now reads this column; the x-data-tier header is ignored).
mainis live-deployed, and PR #234 is breaking unless these are in place first. This issue is the merge/deploy gate.Must be done before merging/deploying #234
org_idclaim (and optionallytier) on access tokens. The multi-tenant IDOR fix derives org from this claim; without it,/api/dealsand/api/contactsreturn 403 for every user (fail-closed by design). Namespaced custom claims (https://…/org_id) are supported.STRIPE_WEBHOOK_SECRET,TWILIO_AUTH_TOKEN,SENDGRID_WEBHOOK_VERIFICATION_KEY,PLAID_WEBHOOK_SECRET. Verifiers now fail closed (401) when unset (previously fail-open).JWT_SECRETis set in every environment —validateConfig()now throws on boot if missing (insecure fallback removed).018) actually enforces — the table owner bypasses non-FORCEd policies. The per-requestapp.current_org_idGUC is wired viaorgContextMiddleware.014–019rollout —014setsprospects.org_id NOT NULLand backfills existing rows to a default "Unassigned" org.organizations.subscription_tier→ data-tier mapping matches product intent (dataTier entitlement now reads this column; thex-data-tierheader is ignored).Ref: PR #234,
docs/logos/praxis.md§C.