Row-Level Security
Buka di CMSRow-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:
| Permission | Cakupan yang dimaksud |
|---|---|
sales | Hanya melihat order dan pelanggan di wilayah yang ditetapkan untuknya |
manager | Melihat semua order, tetapi tidak melihat kolom biaya atau margin |
finance | Melihat semua data pendapatan dan biaya tanpa batasan |
admin | Tanpa 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.
| Kolom | Nilai |
|---|---|
status | active |
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.
| Placeholder | Diganti 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 condition | Nilai |
|---|---|
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
- Testing Queries: simulasikan RLS dengan permission user yang berbeda sebelum go live.
- Configure Tables and Columns: pilih kolom mana yang terlihat sebelum menerapkan policy.
- Overview SQL Database Reader