User Service
User Service adalah service NestJS yang mengelola autentikasi, otorisasi, dan manajemen user di platform RAGA. Service ini menjadi pusat penerbitan JWT yang dipakai lintas service RAGA (termasuk API Tarantula), serta pemilik RBAC (Role-Based Access Control) yang disinkronkan ke OPA (Open Policy Agent) setiap kali ada perubahan role atau policy.
Tech Stack
| Komponen | Teknologi |
|---|---|
| Framework | NestJS 10 (TypeScript) |
| Database | PostgreSQL 16 via TypeORM |
| Cache / Session | Redis / Dragonfly (ioredis + Bull) |
| Object Storage | MinIO (foto profil user) |
| Search / Index | Elasticsearch (log aktivitas user) |
| Autentikasi | JWT (@nestjs/jwt) + bcrypt |
| Secret Management | Infisical |
Detail lengkap versi, environment variable, dan struktur folder ada di halaman Teknis.
Model Domain
RBAC di User Service disusun dari lima entitas inti:
| Entitas | Relasi | Keterangan |
|---|---|---|
User | ManyToOne ke Role | Akun pengguna; satu user punya satu role |
Role | Terhubung ke banyak Policy dan ShortcutAcl | Level akses (punya field level untuk hierarki) |
Feature | OneToMany ke Subfeature | Modul/fitur besar di platform |
Subfeature | ManyToOne ke Feature | Unit akses granular (punya method + url) di dalam sebuah feature |
Policy | Menghubungkan Role ↔ Feature ↔ Subfeature | Baris aturan RBAC: apakah sebuah role boleh mengakses subfeature tertentu (status: boolean) |
ShortcutAcl adalah jalur pintas: satu shortcut ACL memetakan satu role langsung ke sekumpulan subfeature tanpa perlu menyusun policy satu-satu — dipakai untuk preset akses yang sering dipakai berulang.
Peta Modul
| Domain | Modul |
|---|---|
| Authentication | auth, redis, mail |
| User Management | user (+ MinIO untuk foto profil) |
| RBAC | role, features, subfeatures, policies, shortcut-acls, opa |
| Support | open-api, activity-log, infisical, health, utils |
Alur Autentikasi
Login memverifikasi kredensial ke PostgreSQL, menandatangani JWT, lalu menyimpan access & refresh token di Redis/Dragonfly dengan TTL — token yang ada di Redis inilah yang jadi sumber kebenaran untuk validasi maupun invalidasi session (logout menghapus key-nya). Setiap perubahan role/policy memicu panggilan ke opa-data agar rule OPA tetap sinkron. Diagram urutan lengkapnya ada di Teknis.
Integrasi Eksternal
| Layanan | Keterangan |
|---|---|
opa-data (OPA) | Menerima trigger sync setiap ada perubahan role/policy, lalu menarik data terbaru lewat endpoint open-api (role-users, role-grants) |
| API Tarantula | Menerima sinkronisasi nama user setiap data user diupdate |
| License API | Validasi lisensi platform |
| Infisical | Sumber seluruh secret runtime |
| Telegram Bot | Alerting error-level log |
Autentikasi & Akses
Berbeda dari API Tarantula yang membedakan permukaan Open API (app_key) vs internal, seluruh endpoint User Service memakai satu skema: JWT yang diterbitkan oleh modul auth, divalidasi terhadap entri yang tersimpan di Redis (bukan hanya signature JWT-nya), sehingga logout benar-benar menginvalidasi token — bukan sekadar token kedaluwarsa secara alami.
Ringkasan
User Service adalah source of truth identitas dan hak akses RAGA: menerbitkan dan mengelola siklus hidup JWT lewat Redis, menyimpan struktur RBAC (role → policy → feature/subfeature), dan menjaga OPA tetap sinkron setiap kali struktur akses berubah — menjadikannya dependensi inti bagi service lain yang perlu memutuskan "siapa boleh apa".