feat(market): GRANT listings → gendesign_reader — unit-level доступ SF (#1191)
All checks were successful
CI / changes (push) Successful in 6s
CI / backend-tests (push) Has been skipped
CI / frontend-tests (push) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 6s
All checks were successful
CI / changes (push) Successful in 6s
CI / backend-tests (push) Has been skipped
CI / frontend-tests (push) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 6s
- listings + offer_price_history SELECT для gendesign_reader - fail-fast DO-блок: RAISE EXCEPTION если роль не существует (м.101 не применён) - НЕ грантятся listing_sources/snapshots/events (внутренний ETL, не нужен SF) - Контракт: consumer фильтрует vtorichka канон-предикатом сам Closes #1191
This commit is contained in:
parent
9b06377df8
commit
9ffadb9ea6
1 changed files with 39 additions and 0 deletions
|
|
@ -0,0 +1,39 @@
|
||||||
|
-- 102_grant_listings_gendesign_reader.sql
|
||||||
|
-- Доступ gendesign_reader к market-слою tradein: unit-level квартиры-объявления (#1191).
|
||||||
|
--
|
||||||
|
-- Контекст: Site Finder читает вторичный рынок через ETL-роль gendesign_reader.
|
||||||
|
-- Потребитель сам фильтрует канон-предикатом:
|
||||||
|
-- WHERE listing_segment IS NULL OR listing_segment = 'vtorichka'
|
||||||
|
-- Этот файл НЕ навязывает фильтр — ответственность на стороне consumer'а (#1191 контракт).
|
||||||
|
--
|
||||||
|
-- Гранты:
|
||||||
|
-- listings — основная таблица объявлений (цена, площадь, адрес, геометрия).
|
||||||
|
-- offer_price_history — история изменений цен на квартиру (#023); нужна SF для анализа
|
||||||
|
-- динамики цены в разрезе участка (trend up/down, volatility).
|
||||||
|
--
|
||||||
|
-- НЕ грантится:
|
||||||
|
-- listing_sources, listing_source_snapshots, listing_source_events — внутренний ETL tradein,
|
||||||
|
-- не несут дополнительной ценности для SF read-запросов поверх того, что уже есть в listings
|
||||||
|
-- + offer_price_history.
|
||||||
|
--
|
||||||
|
-- Идемпотентно: GRANT SELECT идемпотентен; роль проверяется fail-fast DO-блоком ниже.
|
||||||
|
-- AUTO-APPLIED на прод при деплое через deploy-tradein.yml/_schema_migrations.
|
||||||
|
-- Применяется после 101_gendesign_reader_role.sql (NN гарантирует порядок).
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
|
||||||
|
-- Fail-fast: роль должна существовать (м.101 идёт раньше по NN — заведомо ok).
|
||||||
|
DO $$
|
||||||
|
BEGIN
|
||||||
|
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'gendesign_reader') THEN
|
||||||
|
RAISE EXCEPTION 'роль gendesign_reader отсутствует — сначала примените 101_gendesign_reader_role.sql';
|
||||||
|
END IF;
|
||||||
|
END$$;
|
||||||
|
|
||||||
|
-- unit-level объявления вторичного рынка
|
||||||
|
GRANT SELECT ON listings TO gendesign_reader;
|
||||||
|
|
||||||
|
-- история цен на объявление (#023) — динамика цен квартир нужна SF (trend/volatility)
|
||||||
|
GRANT SELECT ON offer_price_history TO gendesign_reader;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
Loading…
Add table
Reference in a new issue