feat: 新增企业级操作审计日志闭环模块(包含底层模型、记录装饰器与前端看板)
This commit is contained in:
47
inventory-backend/app/models/audit.py
Normal file
47
inventory-backend/app/models/audit.py
Normal file
@ -0,0 +1,47 @@
|
||||
# inventory-backend/app/models/audit.py
|
||||
from app.extensions import db
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class AuditLog(db.Model):
|
||||
"""
|
||||
操作审计日志表
|
||||
记录所有关键业务操作
|
||||
"""
|
||||
__tablename__ = 'audit_logs'
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
user_id = db.Column(db.Integer, nullable=True, index=True) # 操作人ID(sys_user.id)
|
||||
username = db.Column(db.String(100), nullable=False, index=True) # 操作人账号
|
||||
display_name = db.Column(db.String(100)) # 操作人显示名称
|
||||
action = db.Column(db.String(50), nullable=False, index=True) # 操作类型: create/update/delete/export 等
|
||||
module = db.Column(db.String(50), nullable=False, index=True) # 业务模块: inbound_buy/inbound_semi/bom/user 等
|
||||
target_id = db.Column(db.String(100), index=True) # 被操作的数据ID
|
||||
target_name = db.Column(db.String(200)) # 被操作数据的显示名称
|
||||
details = db.Column(db.JSON) # 详细变更内容 {old: {}, new: {}}
|
||||
ip_address = db.Column(db.String(50)) # 操作IP
|
||||
user_agent = db.Column(db.String(500)) # 浏览器UA
|
||||
method = db.Column(db.String(10)) # HTTP方法
|
||||
url = db.Column(db.String(500)) # 请求URL
|
||||
status_code = db.Column(db.Integer) # 响应状态码
|
||||
error_message = db.Column(db.Text) # 错误信息(如有)
|
||||
created_at = db.Column(db.DateTime, default=datetime.now, index=True) # 操作时间
|
||||
|
||||
def to_dict(self):
|
||||
return {
|
||||
'id': self.id,
|
||||
'user_id': self.user_id,
|
||||
'username': self.username,
|
||||
'display_name': self.display_name,
|
||||
'action': self.action,
|
||||
'module': self.module,
|
||||
'target_id': self.target_id,
|
||||
'target_name': self.target_name,
|
||||
'details': self.details,
|
||||
'ip_address': self.ip_address,
|
||||
'method': self.method,
|
||||
'url': self.url,
|
||||
'status_code': self.status_code,
|
||||
'error_message': self.error_message,
|
||||
'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S') if self.created_at else None
|
||||
}
|
||||
Reference in New Issue
Block a user