Adds accounting-service PATCH/archive, fiscal helpers, COA templates and setup status, plus SuperApp Accounting UI (DS, scoreboard, masters, vouchers, ledger, ops modules) with session refresh and HTTPS public API URLs. Co-authored-by: Cursor <cursoragent@cursor.com>
1.5 KiB
1.5 KiB
Identity Architecture
Layers (mandatory separation)
| Layer | Who | Central Keycloak SSO |
|---|---|---|
| Platform core | Platform admin, tenant owner/staff | Required |
| Subsystem staff UIs | Cafe panel, CRM, … | Required — same JWT |
| Tenant end-customer | e.g. digital menu guest | Optional — may be local to module DB |
Central Login
Keycloak realm superapp, theme torbatyar:
- Tab: password (username/email/mobile + password)
- Tab: mobile OTP (Identity
/auth/mobile/*→ handoff →/auth/callback)
Frontend /login and /register redirect to Keycloak. Admin login uses the same SSO path.
Core Users
Table users in core_platform_db: mobile (unique, required), mobile_verified, keycloak_sub, current_tenant_id, platform role.
UserService.resolve_current maps:
- Local OTP JWT →
users.id - Keycloak JWT →
users.keycloak_sub(JIT link/create when possible)
Identity Service
Database identity_access_db. Profiles hold Keycloak subject, mobile verification, optional core_user_id. OTP SMS is delegated to Core (CoreOtpClient) — no duplicate SMS logic.
Mobile Mandate
Mobile is mandatory and OTP-verified (ADR-005).