"""Persist workspace-bound human-user grants.""" from __future__ import annotations import sqlalchemy as sa from alembic import op revision = "0007_user_grants" down_revision = "0006_service_accounts" branch_labels = None depends_on = None def upgrade() -> None: """Create human-user knowledge-space grants.""" op.create_table( "user_grants", sa.Column("id", sa.Uuid(), primary_key=True), sa.Column("workspace_id", sa.Uuid(), nullable=False), sa.Column("user_id", sa.Uuid(), nullable=False), sa.Column("knowledge_space_id", sa.Uuid(), nullable=False), sa.Column("role", sa.String(32), nullable=False), sa.Column("active", sa.Boolean(), nullable=False, server_default=sa.true()), sa.Column( "created_at", sa.DateTime(timezone=True), nullable=False, server_default=sa.func.now() ), sa.ForeignKeyConstraint( ["knowledge_space_id", "workspace_id"], ["control.spaces.id", "control.spaces.workspace_id"], ondelete="CASCADE", ), sa.UniqueConstraint( "user_id", "knowledge_space_id", "role", name="uq_user_grants_user_space_role" ), schema="control", ) def downgrade() -> None: """Remove human-user grants.""" op.drop_table("user_grants", schema="control")