Akses dibangun di atas
deny-by-default.
Compass menggunakan RBAC empat peran — Owner, Admin, Manager, Karyawan — didukung keamanan baris-level deny-by-default dan isolasi data per org. Kotak masuk persetujuan membatasi peningkatan peran. Log audit append-only mencatat setiap tindakan signifikan. Akses harus diraih dan diberikan — tidak pernah diasumsikan.
RLS deny-by-default diterapkan di lapisan database. Data org tidak pernah bocor antar tenant. Log audit append-only — tidak ada baris yang dihapus.
Keamanan yang hidup di lapisan data, bukan UI
Kebanyakan aplikasi mempercayai UI untuk menegakkan akses. Compass menegakkan akses di lapisan database — keamanan baris-level (RLS) deny-by-default berarti bahkan jika bug UI menampilkan tombol, kueri data mengembalikan kosong kecuali peran secara eksplisit diotorisasi. Isolasi org bersifat struktural. Tidak ada tombol konfigurasi yang bisa secara tidak sengaja mengekspos data satu org ke org lain.
Apa yang bisa — dan tidak bisa — dilakukan setiap peran
Matriks di bawah menunjukkan kapabilitas mana yang dapat diakses setiap peran. Akses parsial (∼) berarti dibatasi pada data sendiri saja — manajer bisa melihat data tim, bukan lintas tim. Ini diterapkan di lapisan data.
| Kapabilitas | Owner | Admin | Manager | Karyawan |
|---|---|---|---|---|
| Lihat data sendiri (KPI, Rapor, tugas) | ✓ | ✓ | ✓ | ✓ |
| Lihat data tim (agregat) | ✓ | ✓ | ✓ | — |
| Drill-down Rapor individu | ✓ | ✓ | ∼ | — |
| Kelola anggota (undang, hapus) | ✓ | ✓ | — | — |
| Undang massal CSV | ✓ | ✓ | — | — |
| Setujui permintaan peran Admin | ✓ | — | — | — |
| Konfigurasi pengaturan org & definisi KPI | ✓ | ✓ | — | — |
| Upload aktual (CSV) | ✓ | ✓ | ∼ | — |
| Baca log audit | ✓ | ✓ | — | — |
∼ = dibatasi tim atau data sendiri saja, diterapkan di lapisan data. ✓ = akses penuh untuk peran. — = ditolak oleh kebijakan RLS.
Izin-izin ini diterapkan oleh kebijakan RLS Supabase di lapisan database — bukan hanya diperiksa dalam kode aplikasi. Bug UI tidak bisa mengekspos baris yang tidak diotorisasi untuk dilihat suatu peran. Isolasi org bersifat struktural: setiap kueri memfilter pada org_id = auth.jwt()->'org_id' sebagai kondisi kebijakan keras.
Empat langkah dari undangan ke akses yang dapat diaudit
Admin mengundang anggota melalui UI atau dengan mengunggah CSV berisi nama, email, dan peran awal. Undangan massal diproses secara asinkron — setiap anggota yang diundang menerima email undangan yang dibatasi cakupannya. Tidak ada anggota yang ditambahkan ke org tanpa tindakan undangan eksplisit.
Permintaan peran Admin dan permintaan akses yang ditingkatkan tertentu masuk ke kotak masuk persetujuan Owner. Tidak berlaku sampai disetujui secara eksplisit. Setiap persetujuan dan penolakan ditulis ke log audit dengan timestamp dan identitas penyetuju.
Setelah anggota aktif, kueri mereka difilter oleh kebijakan RLS yang memeriksa peran dan org_id pada setiap permintaan. Data lintas org secara struktural tidak dapat diakses. Penurunan peran berlaku segera — tanpa cache, tanpa penundaan, tanpa sesi yang perlu ditunggu.
Setiap peristiwa signifikan — undangan, persetujuan, perubahan peran, upload data, pembacaan log audit — ditulis ke log audit. Baris bersifat append-only: tidak ada pembaruan, tidak ada penghapusan. Owner dan Admin bisa membaca log lengkap untuk org mereka kapan saja.
Arsitektur, bukan konfigurasi
Properti keamanan yang memerlukan konfigurasi yang benar dari setiap admin adalah properti keamanan yang pada akhirnya akan salah dikonfigurasi. Compass menempatkan jaminan dalam arsitektur sehingga tidak bergantung pada penggunaan yang benar.
Undang. Setujui. Audit.
Admin & Keamanan sudah aktif di Compass. RBAC, RLS deny-by-default, isolasi org, kotak masuk persetujuan, dan log audit append-only aktif dari saat org kamu disiapkan — tanpa konfigurasi yang diperlukan.