Skip to content

Backend Implementation Plan

Detailed Backend Tasks (Auth / Core / Modules)

Section titled “Detailed Backend Tasks (Auth / Core / Modules)”

This phase is split into multiple documents:

  • Auth Backend (fully implemented API) → See: 2.1.-Backend-Auth.

  • Platform Core Backend (to implement) → See: 2.2.-Backend-Core.

  • Module Backends (Finance / Market / Touring / Venue / AI) → Defined in this document


This document defines all backend work required to implement the Kisum platform architecture.

It is intentionally:

  • long
  • explicit
  • implementation-focused
  • non-abstract

This is not theory — this is what engineers should build.


The Auth service is already implemented and should not be modified structurally.

It is responsible for:

  • authentication (login / refresh / logout)
  • JWT issuance and validation
  • user management
  • company memberships
  • roles and permissions (grants)
  • access aggregation (/auth/me/access)

For full API details, refer to: 👉 2.1.-Backend-Auth.md

Auth depends on Platform Core for company entitlements.

See Core implementation in section: 👉 2.2.-Backend-Core.md


Auth integrates with Platform Core to resolve company entitlements.

Flow:

  1. Frontend calls /auth/me/access
  2. Auth loads:
    • user grants (Auth DB)
  3. Auth calls Platform Core:
    • GET /internal/companies/{companyId}/entitlements
  4. Auth merges:
effectiveAccess = entitlements ∩ userGrants
  1. Auth returns final access model
  • Initialize backend service
  • Setup:
    • config loader (env-based)
    • logger (structured JSON logs)
    • HTTP router
    • middleware stack
    • graceful shutdown
  • request ID middleware
  • panic recovery middleware
  • timeout middleware
  • CORS config (for frontend)

  • users
  • sessions
  • company_memberships
  • membership_module_grants
  • permissions
  • membership_permissions
  • membership_delegation_policies
  • create migrations
  • setup connection pooling
  • add retry logic
  • validate schema at startup

  • access cache
  • session cache
  • revocation
  • rate limits
  • connect Redis client
  • namespace keys
  • implement TTL strategy
  • add fallback if Redis down

  • generate RSA keypair
  • expose JWKS endpoint
  • implement token signing
  • implement token verification
  • exp
  • iss
  • aud
  • tokenVersion
  • sessionId

  • create session on login
  • store hashed refresh token
  • revoke session
  • revoke all sessions
  • check session validity on request

POST /auth/login
POST /auth/refresh
POST /auth/logout
POST /auth/logout-all
GET /auth/me
GET /auth/me/access

  • validate inputs
  • standardize responses
  • implement error codes
  • rate limit login

  • load membership by user + company
  • load module grants
  • load permissions
  • load delegation

Modules must be computed as:

enabledModules = (Basic package modules IF active) + (all active addon modules)

Example:

  • Basic inactive
  • Addons: finance, market

→ enabledModules = [“finance”, “market”]

  • Basic active
  • Addons: finance

→ enabledModules = [“basic”, “finance”]

  1. load membership
  2. call Core
  3. merge
  4. compute effective modules
  5. compute permissions
  6. compute delegation
  7. cache result

access:{company}:{membership}:{version}

  • store cache
  • invalidate on change
  • fallback to DB if miss

  • list users
  • create membership
  • update membership
  • grant modules
  • revoke modules
  • grant permissions
  • revoke permissions
  • update delegation

  • same structure as Auth
  • internal API only

  • modules
  • packages
  • addons
  • package_modules
  • addon_modules
  • company_subscriptions
  • company_addons

  • CRUD modules
  • CRUD packages
  • CRUD addons
  • mapping tables

  • activate Basic
  • deactivate Basic
  • activate addon
  • deactivate addon
  • update dates
  • update status
  • bump version

GET /internal/companies/{companyId}/entitlements

Returns:

  • active Basic subscription
  • active addons
  • enabled modules
  • entitlementVersion

GET /internal/catalog/modules
GET /internal/catalog/packages
GET /internal/catalog/addons

POST /internal/catalog/modules
POST /internal/catalog/packages
POST /internal/catalog/addons


POST /internal/companies/{companyId}/basic
POST /internal/companies/{companyId}/addons


  • These endpoints are internal only
  • Must require service-to-service authentication
  • Must NOT be exposed publicly

  • bump version
  • notify Auth
  • clear cache

Every backend MUST:

  1. validate JWT
  2. resolve x-org
  3. load access from Auth:
GET /auth/me/access
  1. check module
  2. check permission
  3. proceed or 403

  • requires Basic subscription
  • requires basic module

  • MUST check module:
module = "finance"
  • MUST check permission:
finance.*
  • MUST reject if:
module disabled → 403
permission missing → 403

  • requires market module

  • requires touring module

  • requires venue module

  • requires ai module

  • must be required header
  • must resolve company

  • implement Redis keys
  • implement invalidation

  • login errors
  • auth failures
  • permission denials
  • cache hits/misses

All internal calls must be secured.

Required for:

  • Auth → Core
  • Backends → Auth (optional)

Options:

  • internal JWT
  • shared secret
  • mTLS (preferred for production)

Never expose internal endpoints publicly.


This backend interacts with Platform Core.

  • manage packages (Core)
  • manage modules (Core)
  • manage permissions (Auth)
  • approve companies
  • manage subscriptions (Core)

  • Auth = access truth
  • Core = commercial truth
  • Backend = execution
  • Frontend = UI only