أمان مستوى الصفوف
فهم أمان مستوى الصفوف (RLS) وتطبيقه لحماية البيانات.
ملاحظة: هذا محتوى تجريبي/مؤقت لأغراض العرض التوضيحي.
أمان مستوى الصفوف (RLS) هو نظام التفويض المدمج في PostgreSQL، وهو يتحكّم في الصفوف التي يمكن للمستخدمين الوصول إليها في جداول قاعدة البيانات.
لماذا RLS؟
يوفّر RLS عدة مزايا:
- أمان على مستوى قاعدة البيانات - حماية حتى لو احتوت شيفرة التطبيق على أخطاء
- فرض تلقائي - لا حاجة إلى عمليات تحقّق يدوية من التفويض
- عزل متعدد المستأجرين - يضمن ألّا يرى المستخدمون سوى بياناتهم الخاصة
- الأداء - مُحسَّن على مستوى قاعدة البيانات
تفعيل RLS
يجب تفعيل RLS على جميع الجداول:
ALTER TABLE your_table ENABLE ROW LEVEL SECURITY;
أنماط السياسات الشائعة
الوصول إلى الحساب الشخصي
CREATE POLICY "Users can access their personal account data" ON your_table FOR ALL USING (account_id = auth.uid());
الوصول إلى حساب الفريق
CREATE POLICY "Users can access their team account data"
ON your_table FOR ALL
USING (
account_id IN (
SELECT account_id FROM accounts_memberships
WHERE user_id = auth.uid()
)
);
صلاحيات القراءة مقابل صلاحيات الكتابة
-- All members can read
CREATE POLICY "Team members can view data"
ON your_table FOR SELECT
USING (account_id IN (SELECT get_user_accounts(auth.uid())));
-- Only owners can modify
CREATE POLICY "Only owners can modify data"
ON your_table FOR UPDATE
USING (
account_id IN (
SELECT account_id FROM accounts_memberships
WHERE user_id = auth.uid() AND role = 'owner'
)
);
اختبار سياسات RLS
اختبر سياسات RLS دائمًا للتأكّد من أنها تعمل بشكل صحيح:
-- Test as specific user SET request.jwt.claims.sub = 'user-uuid-here'; -- Try to select data SELECT * FROM your_table; -- Reset RESET request.jwt.claims.sub;
تجاوز المسؤول
تتجاوز مفاتيح دور الخدمة (Service role) سياسات RLS. استخدمها بحذر شديد، واحرص دائمًا على تطبيق عمليات تحقّق يدوية من التفويض عند استخدام عميل المسؤول.