parent
cc39f23efd
commit
6b0840b0c0
@ -0,0 +1,39 @@ |
||||
from functools import wraps |
||||
from flask import request, jsonify |
||||
from sqlalchemy import select |
||||
from ..db.model import User, Session, db |
||||
|
||||
def requires_role(roles=[]): |
||||
def decorator(f): |
||||
@wraps(f) |
||||
def decorated_function(*args, **kwargs): |
||||
auth_header = request.headers.get('Authorization') |
||||
if not auth_header: |
||||
return jsonify({'error': 'No authorization header sent'}), 401 |
||||
try: |
||||
session_key = auth_header.split(' ')[1] |
||||
except IndexError: |
||||
return jsonify({'error': 'Invalid authorization header format'}), 401 |
||||
|
||||
session = db.session.execute( |
||||
|
||||
) |
||||
if not session: |
||||
return jsonify({'error': 'Invalid or expired session'}), 401 |
||||
user = User.query.get(session.userID) |
||||
if not user: |
||||
return jsonify({'error': 'User not found'}), 401 |
||||
|
||||
# If no roles specified, allow access |
||||
if not roles: |
||||
return f(*args, **kwargs) |
||||
|
||||
# Check if user has any of the required roles |
||||
if user.role in roles: |
||||
return f(*args, **kwargs) |
||||
|
||||
return jsonify({'error': 'Insufficient permissions'}), 403 |
||||
|
||||
return decorated_function |
||||
|
||||
return decorator |
Loading…
Reference in new issue