Performance: Decorator for role requirement
This affects the server response time and user interaction speed by adding checks before executing route logic.
def role_required(role): def decorator(f): def wrapped(*args, **kwargs): user = getattr(g, 'user', None) if not user or role not in user.roles: abort(403) return f(*args, **kwargs) return wrapped return decorator
def role_required(role): def decorator(f): def wrapped(*args, **kwargs): user = get_user_from_db() if role not in user.roles: abort(403) return f(*args, **kwargs) return wrapped return decorator
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| DB query in decorator | 0 | 0 | 0 | [X] Bad |
| Cached user in request context | 0 | 0 | 0 | [OK] Good |
def require_role(role):
def decorator(func):
def wrapper(user_role):
if user_role == role:
return func()
else:
return 'Access Denied'
return wrapper
return decorator
@require_role('admin')
def secret_data():
return 'Secret Info'
print(secret_data('user'))def require_role(role):
def decorator(func):
def wrapper(*args, **kwargs):
if current_user.role == role:
func(*args, **kwargs)
else:
return 'Forbidden'
return wrapper
return decoratorPass the test and this pattern moves unknown