v0.12.0 - Add modular system architecture with user-based module access

- Add Modules and UserModules database tables
- Create home page with module selection grid
- Implement per-user module assignment in user management
- Add route guards for module access control
- Refactor navigation: login -> home -> modules, admin console via button
- Add Font Awesome icons
This commit is contained in:
Javier
2026-01-26 11:35:29 -06:00
parent cbd7e535e6
commit 21671d6bee
17 changed files with 365 additions and 47 deletions

41
app.py
View File

@@ -36,7 +36,7 @@ app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=1)
# 1. Define the version
APP_VERSION = '0.11.3'
APP_VERSION = '0.12.0'
# 2. Inject it into all templates automatically
@app.context_processor
@@ -59,7 +59,7 @@ if not os.path.exists(db_path):
def index():
"""Landing page - redirect based on login status"""
if 'user_id' in session:
return redirect(url_for('dashboard'))
return redirect(url_for('home'))
return redirect(url_for('login'))
@@ -79,7 +79,7 @@ def login():
session['full_name'] = user['full_name']
session['role'] = user['role']
flash(f'Welcome back, {user["full_name"]}!', 'success')
return redirect(url_for('dashboard'))
return redirect(url_for('home'))
else:
flash('Invalid username or password', 'danger')
@@ -94,11 +94,30 @@ def logout():
return redirect(url_for('login'))
# ==================== ROUTES: HOME ====================
@app.route('/home')
@login_required
def home():
"""Module selection landing page"""
user_id = session.get('user_id')
# Get modules this user has access to
modules = query_db('''
SELECT m.module_id, m.module_name, m.module_key, m.description, m.icon
FROM Modules m
JOIN UserModules um ON m.module_id = um.module_id
WHERE um.user_id = ? AND m.is_active = 1
ORDER BY m.display_order
''', [user_id])
return render_template('home.html', modules=modules)
# ==================== ROUTES: DASHBOARD ====================
@app.route('/dashboard')
@app.route('/admin')
@login_required
def dashboard():
def admin_dashboard():
"""Main dashboard - different views for admin vs staff"""
role = session.get('role')
@@ -136,17 +155,7 @@ def dashboard():
''')
return render_template('admin_dashboard.html', sessions=sessions_list, show_archived=show_archived)
else:
# Staff dashboard
active_sessions = query_db('''
SELECT session_id, session_name, session_type, created_timestamp
FROM CountSessions
WHERE status = 'active'
ORDER BY created_timestamp DESC
''')
return render_template('staff_dashboard.html', sessions=active_sessions)
@app.route('/staff-mode')