-- AK-P16c · Forms — RLS ROLLOUT ARTIFACT (deferred, NOT in auto-migration) -- Code-side access runs through formsAccess + tenant scoped Prisma filters. -- Enabling FORCE RLS is coordinated with the restricted runtime role cutover. -- -- Inverse per table: -- REVOKE SELECT, INSERT, UPDATE, DELETE ON "" FROM hivegrid_app; -- DROP POLICY IF EXISTS "_tenant_isolation" ON ""; -- ALTER TABLE "" NO FORCE ROW LEVEL SECURITY; -- ALTER TABLE "" DISABLE ROW LEVEL SECURITY; DO $$ DECLARE tbl text; BEGIN FOREACH tbl IN ARRAY ARRAY['Form', 'FormField', 'FormSubmission', 'FormFile', 'FormAction', 'FormActionLog'] LOOP EXECUTE format('ALTER TABLE %I ENABLE ROW LEVEL SECURITY;', tbl); EXECUTE format('ALTER TABLE %I FORCE ROW LEVEL SECURITY;', tbl); IF NOT EXISTS ( SELECT 1 FROM pg_policies WHERE schemaname = current_schema() AND tablename = tbl AND policyname = tbl || '_tenant_isolation' ) THEN EXECUTE format( 'CREATE POLICY %I ON %I USING ("tenantId" = current_setting(''app.tenant_id'', true)) WITH CHECK ("tenantId" = current_setting(''app.tenant_id'', true));', tbl || '_tenant_isolation', tbl ); END IF; EXECUTE format('GRANT SELECT, INSERT, UPDATE, DELETE ON %I TO hivegrid_app;', tbl); END LOOP; END $$;