Skip to content

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

KomponenTeknologi
FrameworkNestJS 10 (TypeScript)
DatabasePostgreSQL 16 via TypeORM
Cache / SessionRedis / Dragonfly (ioredis + Bull)
Object StorageMinIO (foto profil user)
Search / IndexElasticsearch (log aktivitas user)
AutentikasiJWT (@nestjs/jwt) + bcrypt
Secret ManagementInfisical

Detail lengkap versi, environment variable, dan struktur folder ada di halaman Teknis.

Model Domain

RBAC di User Service disusun dari lima entitas inti:

EntitasRelasiKeterangan
UserManyToOne ke RoleAkun pengguna; satu user punya satu role
RoleTerhubung ke banyak Policy dan ShortcutAclLevel akses (punya field level untuk hierarki)
FeatureOneToMany ke SubfeatureModul/fitur besar di platform
SubfeatureManyToOne ke FeatureUnit akses granular (punya method + url) di dalam sebuah feature
PolicyMenghubungkan RoleFeatureSubfeatureBaris 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

DomainModul
Authenticationauth, redis, mail
User Managementuser (+ MinIO untuk foto profil)
RBACrole, features, subfeatures, policies, shortcut-acls, opa
Supportopen-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

LayananKeterangan
opa-data (OPA)Menerima trigger sync setiap ada perubahan role/policy, lalu menarik data terbaru lewat endpoint open-api (role-users, role-grants)
API TarantulaMenerima sinkronisasi nama user setiap data user diupdate
License APIValidasi lisensi platform
InfisicalSumber seluruh secret runtime
Telegram BotAlerting 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".