Proyek kesepuluh adalah puncak kesulitan: satu codebase melayani banyak tenant dengan data yang harus terisolasi. Kita merancang domain model tenant, menerapkan isolasi di lapisan repository, membangun membership dan permission antar tenant, simulasi billing subscription, audit trail, background jobs, lalu menutup dengan security testing dan deployment.
Tantangan multi-tenant adalah detail kecil yang bocor: query yang lupa filter tenant, data yang tersimpan tanpa konteks, dan job yang berjalan lintas pelanggan. Kode pada setiap bagian diuji ketat untuk memastikan isolasi benar-benar terjadi, termasuk lewat test suite khusus isolasi.
Rancang model data multi-tenant: tabel tenants, users global, memberships ber-PK komposit, dan projects yang selalu membawa tenant_id.
Buka → # Bagian 2: Tenant IsolationBangun TenantContext yang immutable dan TenantRepository yang ter-scoped, lalu buktikan query tanpa filter tenant_id adalah kebocoran data.
Buka → # Bagian 3: Membership dan PermissionsKelola keanggotaan user pada tenant lewat MembershipRepository dan tegakkan matriks izin role dengan AccessControl yang menolak secara default.
Buka → # Bagian 4: Billing dan SubscriptionsBangun PlanRepository dan SubscriptionService dengan waktu beku: langganan 30 hari, masa tenggang, kedaluwarsa, dan gerbang batas proyek per plan.
Buka → # Bagian 5: Audit dan Background JobsBangun audit trail append-only per tenant dan job queue dengan retry backoff: jejak yang tak bisa ditulis ulang dan pekerjaan yang hidup lebih lama dari request.
Buka → # Bagian 6: Security dan TestingBangun test suite PHPUnit yang menjaga invarian isolasi multi-tenant: context, IDOR, audit, batas plan, dan siklus job pada database segar per test.
Buka → # Bagian 7: Deployment dan MonitoringKemas aplikasi SaaS ke dalam image Docker dengan urutan migrasi schema-billing-audit, metrik kuota per tenant, health check struktur, dan checklist kesiapan produksi.
Buka →