From 6fa8a896fd647a22e27e4e8627ebb8c439c7d0a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Tue, 21 Jul 2026 11:52:34 +0300 Subject: [PATCH] =?UTF-8?q?fix(=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B5=D0=B2-?= =?UTF-8?q?=D0=BF=D0=BB=D0=BE=D1=89=D0=B0=D0=B4=D0=BA=D0=B8):=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82=D1=8C=20GRANT=20=D0=B2=20?= =?UTF-8?q?=D0=BC=D0=B8=D0=B3=D1=80=D0=B0=D1=86=D0=B8=D1=8E=20sales=5Fad?= =?UTF-8?q?=5Faudience=5Fplatforms?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Blanket ON ALL TABLES не покрывает таблицу, созданную позже миграцией, а ALTER DEFAULT PRIVILEGES срабатывает только для роли-создателя — без инлайновых GRANT crm_admin_user словил бы permission denied на бою (dev-тесты идут суперюзером и грантов не видят). Зеркалит паттерн соседней миграции 2026_07_19_100000_create_sales_ad_audience_tables. Co-Authored-By: Claude Opus 4.8 (1M context) --- ...07_21_120000_create_ad_audience_platforms.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/app/database/migrations/2026_07_21_120000_create_ad_audience_platforms.php b/app/database/migrations/2026_07_21_120000_create_ad_audience_platforms.php index 0a69a429..7160cdc1 100644 --- a/app/database/migrations/2026_07_21_120000_create_ad_audience_platforms.php +++ b/app/database/migrations/2026_07_21_120000_create_ad_audience_platforms.php @@ -38,6 +38,22 @@ return new class extends Migration ) SQL); + // GRANTs обеим ролям admin-db (как в create_sales_ad_audience_tables). + // Blanket ON ALL TABLES не покрывает таблицу, созданную позже миграцией, + // а DEFAULT PRIVILEGES срабатывает только для роли-создателя. Тестам гранты + // невидимы (dev = суперюзер) — забытый GRANT = permission denied на бою. + $db->statement(<<<'SQL' + DO $$ + DECLARE target text; + BEGIN + FOREACH target IN ARRAY ARRAY['crm_admin_user','crm_supplier_worker'] LOOP + IF EXISTS (SELECT 1 FROM pg_roles WHERE rolname = target) THEN + EXECUTE format('GRANT SELECT, INSERT, UPDATE ON sales_ad_audience_platforms TO %I', target); + END IF; + END LOOP; + END $$ + SQL); + $db->statement(<<<'SQL' INSERT INTO sales_ad_audience_platforms (platform, enabled, min_phones, external_id, last_synced_at, last_error, status, updated_at)