32 lines
1.0 KiB
Python
32 lines
1.0 KiB
Python
"""Audit log for tracking sensitive administrative actions."""
|
|
|
|
from app.extensions import db
|
|
from datetime import datetime
|
|
|
|
|
|
class AuditLog(db.Model):
|
|
"""Append-only log of critical admin actions for accountability."""
|
|
|
|
__tablename__ = 'audit_logs'
|
|
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=True)
|
|
action = db.Column(db.String(100), nullable=False)
|
|
details = db.Column(db.Text, nullable=True)
|
|
ip_address = db.Column(db.String(64), nullable=True)
|
|
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
|
|
|
user = db.relationship('User', foreign_keys=[user_id], backref='audit_logs')
|
|
|
|
@staticmethod
|
|
def record(user_id, action, details=None, ip_address=None):
|
|
"""Create a new audit log entry."""
|
|
entry = AuditLog(
|
|
user_id=user_id,
|
|
action=action,
|
|
details=details,
|
|
ip_address=ip_address,
|
|
)
|
|
db.session.add(entry)
|
|
db.session.commit()
|
|
return entry |