feat(ui/rbac): ordenar navegacion segun estandares de la industria y personalizar dashboards por rol (Admin, Bedelia, Docente, Alumno)
This commit is contained in:
@@ -5,6 +5,7 @@ from app import db
|
||||
from app.models.user import User
|
||||
from app.models.role import Role, Permission, SYSTEM_MODULES, ACCESS_LEVELS
|
||||
from app.models.milestone import MilestoneType, AcademicMilestone, BASE_MILESTONE_TYPES
|
||||
from app.models.audit_log import AuditLog
|
||||
from app.utils.decorators import admin_required, permission_required
|
||||
from sqlalchemy import or_
|
||||
import re
|
||||
@@ -1116,4 +1117,51 @@ def occupancy_metrics():
|
||||
)
|
||||
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# AUDIT LOGS
|
||||
# ---------------------------------------------------------
|
||||
|
||||
@admin_bp.route('/audit-logs')
|
||||
@admin_required
|
||||
def audit_logs():
|
||||
"""Vista de bitácora de auditoría del sistema"""
|
||||
page = request.args.get('page', 1, type=int)
|
||||
module_filter = request.args.get('module', '').strip()
|
||||
action_filter = request.args.get('action', '').strip()
|
||||
search = request.args.get('search', '').strip()
|
||||
per_page = 20
|
||||
|
||||
query = AuditLog.query
|
||||
|
||||
if module_filter:
|
||||
query = query.filter(AuditLog.module == module_filter)
|
||||
if action_filter:
|
||||
query = query.filter(AuditLog.action == action_filter)
|
||||
if search:
|
||||
query = query.filter(
|
||||
or_(
|
||||
AuditLog.user_email.ilike(f'%{search}%'),
|
||||
AuditLog.details.ilike(f'%{search}%'),
|
||||
AuditLog.ip_address.ilike(f'%{search}%')
|
||||
)
|
||||
)
|
||||
|
||||
pagination = query.order_by(AuditLog.created_at.desc()).paginate(page=page, per_page=per_page, error_out=False)
|
||||
|
||||
# Módulos y acciones únicas para los selectores de filtro
|
||||
modules = [r[0] for r in db.session.query(AuditLog.module).distinct().all() if r[0]]
|
||||
actions = [r[0] for r in db.session.query(AuditLog.action).distinct().all() if r[0]]
|
||||
|
||||
return render_template(
|
||||
'admin/audit_logs.html',
|
||||
pagination=pagination,
|
||||
audit_logs=pagination.items,
|
||||
modules=modules,
|
||||
actions=actions,
|
||||
current_module=module_filter,
|
||||
current_action=action_filter,
|
||||
search=search
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user