🔒 Row Level Security (RLS) в Supabase
RLS — это механизм PostgreSQL, позволяющий разграничивать доступ к данным на уровне строк прямо в базе данных. Это гарантирует безопасность, даже если ваш фронтенд скомпрометирован.
🟢 Основы RLS
Для каждой таблицы в Supabase Dashboard (Database → Tables) необходимо:
- Включить переключатель Enable RLS.
- Создать хотя бы одну политику (Policy), иначе доступ ко всем строкам будет закрыт.
🛠 Практические примеры политик (SQL)
1. Доступ только владельцу строки
Если в таблице есть колонка uuid_owner, сопоставляем её с ID авторизованного пользователя.
(auth.uid() = uuid_owner)2. Права только для Администраторов
Предположим, в таблице users есть колонка tariff (или role).
(EXISTS (
SELECT 1 FROM users
WHERE users.id = auth.uid() AND users.tariff = 'admin'
))3. Доступ при совпадении столбцов в разных таблицах
Например, пользователь (users) видит товары (productos) только своего магазина (myShopN == shopIDRef).
(EXISTS (
SELECT 1 FROM users u
JOIN productos p ON u."myShopN" = p."shopIDRef"
WHERE u.id = auth.uid()
))⚡️ Продвинутые техники
Безопасность VIEW
По умолчанию View наследуют права создателя (security definer). Чтобы к ним применялись правила RLS таблиц, нужно добавить модификатор:
ALTER VIEW name_of_view SET (security_invoker = true);Дать доступ конкретному UUID
Если нужно жестко прописать доступ для технического аккаунта:
(auth.uid() = 'your-uuid-here'::uuid)📺 Видео-гайд
- A Crash Course In RLS For FlutterFlow Users — Подробный разбор политики безопасности.
- Supabase Is A LOT More POWERFUL Than You Thought! — Про MFA и сложные права доступа.
Смотрите также: Индекс Supabase