17 lines
521 B
Python
17 lines
521 B
Python
from functools import wraps
|
|
from flask_jwt_extended import get_jwt
|
|
from flask import abort
|
|
|
|
|
|
def role_required(*required_roles):
|
|
def wrapper(fn):
|
|
@wraps(fn)
|
|
def decorator(*args, **kwargs):
|
|
claims = get_jwt()
|
|
user_roles = claims.get("roles", [])
|
|
if not any(role in user_roles for role in required_roles):
|
|
abort(403, description="Access forbidden: insufficient role")
|
|
return fn(*args, **kwargs)
|
|
return decorator
|
|
return wrapper
|