Row-Level Security

Buka di CMS

Row-Level Security (RLS) membatasi baris yang dikembalikan oleh sebuah query berdasarkan permission yang dimiliki user. Saat diaktifkan, setiap query yang dijalankan plugin otomatis difilter oleh policy yang Anda definisikan, sehingga user hanya melihat data yang boleh mereka akses, apa pun cara mereka merumuskan pertanyaan.

Buka Tools → Plugins → SQL Database Reader → Security di sidebar agent.


Kapan Menggunakan RLS

Aktifkan RLS ketika:

  • User yang berbeda harus melihat bagian data yang berbeda dari data yang sama, misalnya sales rep hanya melihat order di wilayahnya.
  • Data sensitif seperti gaji, data pribadi, atau detail keuangan harus dibatasi berdasarkan role.
  • Database multi-tenant memakai tabel yang sama untuk banyak akun dan baris-barisnya harus diisolasi per pelanggan.

Jika semua user yang terautentikasi boleh melihat semua data, biarkan RLS nonaktif.


Mengaktifkan RLS

Nyalakan toggle Require Policies. Setelah diaktifkan, setiap query akan diterapkan filter policy yang cocok secara otomatis sebelum dieksekusi.

Jika permission seorang user tidak cocok dengan policy mana pun yang dikonfigurasi, query tidak mengembalikan baris apa pun.


Permission Policy

Permission policy adalah sekumpulan aturan bernama yang berlaku untuk user yang memiliki permission tertentu. Buat satu policy untuk setiap tingkat akses yang berbeda di sistem Anda.

Contoh policy:

PermissionCakupan yang dimaksud
salesHanya melihat order dan pelanggan di wilayah yang ditetapkan untuknya
managerMelihat semua order, tetapi tidak melihat kolom biaya atau margin
financeMelihat semua data pendapatan dan biaya tanpa batasan
adminTanpa batasan, melihat semuanya

Table Scope Policy

Di dalam sebuah permission policy, table scope policy menentukan baris mana yang terlihat di tabel tertentu bagi user dengan permission tersebut.

Column Condition

Filter kesamaan sederhana yang diterapkan pada satu atau beberapa kolom. Semua kondisi dalam satu table scope policy digabungkan dengan AND.

Contoh: Batasi tabel orders ke order aktif di wilayah user.

KolomNilai
statusactive
region{MESSENGER_ACCOUNT_CODE()}

Saat query dijalankan, ini menghasilkan:

WHERE status = 'active' AND region = 'APAC'

SQL Expression

Untuk pemfilteran yang kompleks, tulis SQL expression mentah. Expression ini ditambahkan ke klausa WHERE query dengan AND dan boleh merujuk kolom mana pun di tabel atau menggunakan subquery.

Contoh:

sales_region = (SELECT region FROM sales_reps WHERE user_id = '{USER_ID()}')

Column condition dan SQL expression bisa dikombinasikan pada tabel yang sama; semuanya diterapkan bersamaan.


Placeholder Konteks User

Gunakan placeholder berikut di dalam nilai column condition dan SQL expression. Placeholder diganti saat query dieksekusi dengan nilai sesi sebenarnya milik user yang terautentikasi.

PlaceholderDiganti dengan
{USER_ID()}ID user yang terautentikasi
{USER_EMAIL()}Alamat email user yang terautentikasi
{AGENT_ID()}ID agent yang menangani conversation
{MESSENGER_ACCOUNT_CODE()}Kode akun messenger, misalnya identifier akun WhatsApp
{MESSENGER_PRODUCT()}Jenis produk messenger, misalnya whatsapp atau instagram

Contoh: Akses Penjualan Multi-Wilayah

Skenario: Sales rep hanya melihat order dari wilayah yang ditetapkan untuknya. Manager melihat semua order.

Policy: sales

Tabel: orders

Column conditionNilai
region{MESSENGER_ACCOUNT_CODE()}

Policy: manager

Tanpa table scope policy: user dengan permission ini melihat semua baris tanpa tambahan klausa WHERE.

Saat user dengan permission sales bertanya "Tampilkan order hari ini", SQL yang dihasilkan menyertakan:

WHERE orders.region = 'APAC'  -- substituted from MESSENGER_ACCOUNT_CODE()

Saat user dengan permission manager mengajukan pertanyaan yang sama, tidak ada batasan klausa WHERE yang ditambahkan.


Menguji RLS

Gunakan panel pengujian query untuk menyimulasikan kumpulan permission yang berbeda. Masukkan nama permission di field User Permissions dan perhatikan bagaimana SQL hasil terjemahan berubah. Kombinasikan dengan field User Context untuk menyimulasikan penggantian placeholder sekaligus.


Halaman Terkait