phase12: disable RLS on automation tables (written at startup)

This commit is contained in:
Agent Zero
2026-07-30 00:06:43 +02:00
parent 0d7602db3a
commit 42d004c2c9
@@ -0,0 +1,53 @@
"""Disable RLS on automation tables (written at startup without tenant context).
The automation plugin registers cron jobs and definitions during plugin
activation, which happens at startup before a tenant context is set.
RLS blocks these INSERTs because app.current_tenant_id is a dummy default.
Revision ID: 0078
Revises: 0077
"""
from alembic import op
from sqlalchemy import text
revision = "0078"
down_revision = "0077"
branch_labels = None
depends_on = None
TABLES = [
"automation_agent_definitions",
"automation_agent_runs",
"automation_agent_versions",
"automation_cron_jobs",
"automation_definitions",
"automation_runs",
"automation_versions",
]
def upgrade() -> None:
conn = op.get_bind()
for table in TABLES:
exists = conn.execute(
text(f"SELECT 1 FROM information_schema.tables WHERE table_name = '{table}'")
).fetchone() is not None
if not exists:
continue
conn.execute(text(f"DROP POLICY IF EXISTS {table}_tenant_isolation ON {table}"))
conn.execute(text(f"ALTER TABLE {table} DISABLE ROW LEVEL SECURITY"))
def downgrade() -> None:
conn = op.get_bind()
for table in TABLES:
exists = conn.execute(
text(f"SELECT 1 FROM information_schema.tables WHERE table_name = '{table}'")
).fetchone() is not None
if not exists:
continue
conn.execute(text(f"ALTER TABLE {table} ENABLE ROW LEVEL SECURITY"))
conn.execute(text(
f"CREATE POLICY {table}_tenant_isolation ON {table} "
"FOR ALL "
"USING (tenant_id = current_setting('app.current_tenant_id', true)::uuid) "
"WITH CHECK (tenant_id = current_setting('app.current_tenant_id', true)::uuid)"
))