68 lines
1.9 KiB
Python
68 lines
1.9 KiB
Python
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)
|