From f5482f415c4b0cb063e5d8ea8c0f188ef5bc80bd 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: Sat, 23 May 2026 12:27:57 +0300 Subject: [PATCH] fix(pd): PdSubjectRequest::$connection = pgsql_supplier (hole #4 prod fix) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit crm_app_user (default pgsql connection) не имеет INSERT/UPDATE прав на pd_subject_requests — это SaaS-уровневая таблица. На проде Eloquent PdSubjectRequest::create() падал с Insufficient privilege. Фикс: protected $connection = 'pgsql_supplier' (BYPASSRLS, crm_supplier_worker) — симметрично существующему контроллеру и сервису. Альтернатива (GRANT для crm_app_user) размывает границу tenant-уровня (db/00_create_roles.sql). Smoke прод: create через tinker → row.id=1, deadline_at +30 дней auto-trigger сработал. Cleanup row выполнен. Tests: 12/12 passed (67 assertions, 2.5s). --- app/app/Models/PdSubjectRequest.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/app/Models/PdSubjectRequest.php b/app/app/Models/PdSubjectRequest.php index ebcbe5f0..b17b2ac8 100644 --- a/app/app/Models/PdSubjectRequest.php +++ b/app/app/Models/PdSubjectRequest.php @@ -32,6 +32,14 @@ use Illuminate\Support\Facades\DB; */ class PdSubjectRequest extends Model { + /** + * SaaS-уровневая таблица — crm_app_user (default) не имеет INSERT/UPDATE прав. + * Используем pgsql_supplier (BYPASSRLS / crm_supplier_worker), который имеет + * полный доступ. Альтернатива — GRANT для crm_app_user, но это размывает + * границу tenant-уровня (см. db/00_create_roles.sql). + */ + protected $connection = 'pgsql_supplier'; + protected $table = 'pd_subject_requests'; public $timestamps = false;