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)