Multi-Tier Scoped RBAC
Zero-Leak Property Scoping & Cross-Tenant IDOR Prevention
Hirarki 4 peran (Superadmin, Admin, Manager, Frontdesk) dengan pembatasan domain (scoping) ketat untuk mencegah kebocoran data antar-penyewa properti.
Diagram Alur Data & Arsitektur Sistem
Visual InteraktifDiagram Keputusan Otorisasi PropertyScopeGuard
Verifikasi hak akses hirarki peran dan isolasi properti tenant
Incoming Request
JWT Bearer Token
JwtAuthGuard
Extract user & role
PropertyScopeGuard
user.propertyId === target
Controller Access
200 OK (Authorized)
Security Rejection
403 Forbidden (Blocked)
Problem & Latar Belakang Kebutuhan
Platform melayani puluhan hotel dan pengelola properti sekaligus dalam satu basis data terpusat (multi-tenancy). Tanpa scoped authorization guard, celah Insecure Direct Object Reference (IDOR) dapat terjadi di mana Manager Hotel A dapat memodifikasi video sambutan, tarif amenities, atau daftar tamu milik Hotel B hanya dengan mengganti parameter propertyId pada URL request.
Implementasi Rekayasa Backend NestJS
NestJS mengimplementasikan PropertyScopeGuard. Jika caller adalah Superadmin atau Admin, akses granted ke seluruh properti terdaftar untuk keperluan pemeliharaan platform. Jika caller adalah Manager atau Frontdesk, guard memverifikasi apakah user.propertyId pada token JWT cocok dengan target propertyId pada route parameter atau body payload. Jika tidak cocok, request langsung diputus dengan HTTP 403 Forbidden.
Aspek Model Database MongoDB
Setiap dokumen konten, perangkat, dan log selalu memiliki field propertyId yang terindeks secara unik: db.property_contents.createIndex({ propertyId: 1 }). Kueri tenant dipastikan selalu menyertakan filter propertyId yang divalidasi guard.
Keamanan, Idempotensi & Kepatuhan SLA
Mencegah eksploitasi horizontal privilege escalation secara deterministik di layer guard sebelum kode controller sempat memanggil database.
// PropertyScopeGuard: Pencegah IDOR Lintas-Penyewa
@Injectable()
export class PropertyScopeGuard implements CanActivate {
canActivate(context: ExecutionContext): boolean {
const { user, params, body } = context.switchToHttp().getRequest();
const targetProperty = params.propertyId || body.propertyId;
// Superadmin & Admin memiliki akses operator penuh
if (user.role === 'superadmin' || user.role === 'admin') {
return true;
}
// Manager & Frontdesk dibatasi hanya pada propertinya sendiri
if (user.role === 'manager' || user.role === 'frontdesk') {
if (user.propertyId?.toString() === targetProperty) {
return true;
}
throw new ForbiddenException('Akses Ditolak: Anda tidak memiliki izin untuk properti ini.');
}
throw new ForbiddenException('Role tidak memiliki izin akses.');
}
}Live Simulator & Execution Sandbox
RolesGuard verified caller is 'admin'. Idempotency Key verified in Redis. MongoDB document updated.
Contract for 'Grand Horizon Hotel & Resort' persisted into Property document with 1-Year validity.
Provisioned 1-Year Platinum Contract #PKS-2026-042 via manual B2B order.
Updated welcome video banner and personalized TV dining directory.
Eksplorasi Fitur Terkait Lainnya
Lihat Semua Fitur →Subscription Contract Engine
Provisioning langganan berbasis kontrak formal B2B dengan Idempotency Key, masa berlaku otomatis, dan fitur tersemat (embedded entitlements) pada dokumen MongoDB.
Property Content Management
Pengelolaan materi tayangan hotel (video sambutan kamar, menu amenities digital, banner promo) yang divalidasi dinamis terhadap paket kontrak aktif.
Automated Activity Audit Trail
Pencatatan riwayat audit append-only di koleksi MongoDB activity_logs untuk seluruh aksi administratif, mutasi kontrak, dan perubahan konten.
STB Device Pairing & Room Ops
Otomasi check-in & check-out tamu: pairing perangkat STB, personalisasi nama sambutan TV saat check-in, dan reset sesi privasi secara real-time saat check-out.
Redis Entitlements Cache Layer
Caching status langganan dan hak akses properti di memory Redis untuk validasi izin super cepat (<1ms) pada request STB berfrekuensi tinggi.