Update: admin panel, SMTP/EWS/Outlook mail modes, QR fix, event folders, security improvements
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
from flask import request
|
||||
|
||||
from app import db
|
||||
from app.models import AuditLog
|
||||
|
||||
|
||||
def log_action(action, target_type=None, target_id=None, details=None):
|
||||
"""Записывает действие пользователя в аудит-лог.
|
||||
|
||||
Аргументы:
|
||||
action: короткий код действия, например "guest_create", "event_delete".
|
||||
target_type: тип объекта (event, guest, user, ...).
|
||||
target_id: идентификатор объекта (может быть строкой).
|
||||
details: произвольное текстовое описание или причина.
|
||||
"""
|
||||
try:
|
||||
from app.routes import current_user
|
||||
|
||||
user = current_user()
|
||||
user_id = user.id if user else None
|
||||
username = user.username if user else None
|
||||
except Exception:
|
||||
user_id = None
|
||||
username = None
|
||||
|
||||
ip_address = None
|
||||
try:
|
||||
if request:
|
||||
# Учитываем прокси
|
||||
ip_address = request.headers.get("X-Forwarded-For", request.remote_addr)
|
||||
if ip_address:
|
||||
ip_address = ip_address.split(",")[0].strip()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
record = AuditLog(
|
||||
user_id=user_id,
|
||||
username=username,
|
||||
action=action,
|
||||
target_type=target_type,
|
||||
target_id=str(target_id) if target_id is not None else None,
|
||||
details=details,
|
||||
ip_address=ip_address,
|
||||
)
|
||||
db.session.add(record)
|
||||
# Не делаем commit здесь, чтобы не ломать транзакции вызывающего кода.
|
||||
# Вызывающий код сам делает db.session.commit() после основных изменений.
|
||||
Reference in New Issue
Block a user