from sqlalchemy import Column, Integer, String, Text, DateTime, Enum from sqlalchemy.sql import func from app.core.database import Base import enum class AuditAction(str, enum.Enum): """操作类型枚举""" CREATE = "create" READ = "read" UPDATE = "update" DELETE = "delete" LOGIN = "login" LOGOUT = "logout" SCAN = "scan" IMPORT = "import" EXPORT = "export" OTHER = "other" class AuditResource(str, enum.Enum): """资源类型枚举""" USER = "user" NETWORK = "network" IP_ADDRESS = "ip_address" SNMP_CREDENTIAL = "snmp_credential" SNMP_DEVICE = "snmp_device" ALERT = "alert" WHITELIST_MAC = "whitelist_mac" SCAN_TASK = "scan_task" SYSTEM = "system" class AuditLog(Base): """审计日志表""" __tablename__ = "audit_logs" id = Column(Integer, primary_key=True, index=True) # 操作人信息 user_id = Column(Integer, index=True, nullable=True) username = Column(String(50), index=True) real_name = Column(String(50)) user_ip = Column(String(50)) user_agent = Column(String(500)) # 操作信息 action = Column(Enum(AuditAction), nullable=False, index=True) resource = Column(Enum(AuditResource), nullable=False, index=True) resource_id = Column(String(100), nullable=True) # 操作的资源ID # 详细信息 description = Column(String(500)) # 操作描述 old_value = Column(Text) # 修改前的值 (JSON) new_value = Column(Text) # 修改后的值 (JSON) changed_fields = Column(String(500)) # 变更的字段列表 # 请求信息 request_method = Column(String(10)) request_path = Column(String(200)) # 结果 success = Column(Integer, default=1) # 1=成功,0=失败 error_message = Column(Text) # 时间戳 created_at = Column(DateTime(timezone=True), server_default=func.now(), index=True)