Attender / auth.py
chualinwei3's picture
Update auth.py
5e5118b verified
Raw
History Blame Contribute Delete
1.64 kB
"""
Authentication helper functions and decorators
"""
from functools import wraps
from flask import session, redirect, url_for, flash
from models import User
def login_required(f):
"""Decorator to require login for a route"""
@wraps(f)
def decorated_function(*args, **kwargs):
if 'user_id' not in session:
return redirect(url_for('login_page'))
user = User.query.get(session['user_id'])
if not user:
session.clear()
flash('Session expired. Please login again.', 'error')
return redirect(url_for('login_page'))
return f(*args, **kwargs)
return decorated_function
def role_required(role):
"""Decorator to require specific role for a route"""
def decorator(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if 'user_id' not in session:
flash('Please login to access this page', 'error')
return redirect(url_for('login_page'))
user = User.query.get(session['user_id'])
if not user:
session.clear()
return redirect(url_for('login_page'))
if user.role != role:
flash(f'Access denied. This page is for {role}s only.', 'error')
return redirect(url_for('index'))
return f(*args, **kwargs)
return decorated_function
return decorator
def get_current_user():
"""Get currently logged in user"""
if 'user_id' in session:
return User.query.get(session['user_id'])
return None