Files
H3ConuMS-v2/backend/alembic/versions/g7h8i9j0k1l2_add_audit_logs.py
v6ole f1f8518985 ```
feat(auth): 添加用户权限获取接口并完善JWT令牌角色信息

- 在JWT令牌中添加用户角色信息
- 新增get_my_permissions接口用于获取当前用户权限码列表
- 重构认证回调逻辑,增加错误日志记录
- 更新用户信息获取接口使用Authorization头验证
```
2026-04-06 00:40:08 +08:00

56 lines
2.2 KiB
Python

"""add audit_logs table
Revision ID: g7h8i9j0k1l2
Revises: f6a7b8c9d0e1
Create Date: 2026-04-05
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects.postgresql import JSONB
revision = 'g7h8i9j0k1l2'
down_revision = 'f6a7b8c9d0e1'
branch_labels = None
depends_on = None
def upgrade():
op.create_table(
'audit_logs',
sa.Column('id', sa.Integer(), primary_key=True),
sa.Column('user_id', sa.String(100), nullable=False),
sa.Column('username', sa.String(100), nullable=False),
sa.Column('user_role', sa.String(50)),
sa.Column('action_time', sa.TIMESTAMP(), nullable=False, server_default=sa.text('now()')),
sa.Column('action_type', sa.String(50), nullable=False),
sa.Column('action_subtype', sa.String(50)),
sa.Column('ip_address', sa.String(45)),
sa.Column('user_agent', sa.Text()),
sa.Column('request_method', sa.String(10)),
sa.Column('request_path', sa.String(500)),
sa.Column('status', sa.String(20), nullable=False),
sa.Column('status_code', sa.Integer()),
sa.Column('resource_type', sa.String(50)),
sa.Column('resource_id', sa.String(100)),
sa.Column('resource_name', sa.String(200)),
sa.Column('description', sa.Text(), nullable=False),
sa.Column('request_params', JSONB()),
sa.Column('response_data', JSONB()),
sa.Column('error_message', sa.Text()),
sa.Column('created_at', sa.TIMESTAMP(), nullable=False, server_default=sa.text('now()')),
)
op.create_index('idx_audit_logs_action_time', 'audit_logs', ['action_time'])
op.create_index('idx_audit_logs_user_id', 'audit_logs', ['user_id'])
op.create_index('idx_audit_logs_action_type', 'audit_logs', ['action_type'])
op.create_index('idx_audit_logs_resource_type', 'audit_logs', ['resource_type'])
op.create_index('idx_audit_logs_status', 'audit_logs', ['status'])
def downgrade():
op.drop_index('idx_audit_logs_status', 'audit_logs')
op.drop_index('idx_audit_logs_resource_type', 'audit_logs')
op.drop_index('idx_audit_logs_action_type', 'audit_logs')
op.drop_index('idx_audit_logs_user_id', 'audit_logs')
op.drop_index('idx_audit_logs_action_time', 'audit_logs')
op.drop_table('audit_logs')