tool.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. from functools import wraps
  2. from flask import abort, g, redirect, url_for
  3. from flask_login import current_user
  4. from flask_wtf import FlaskForm
  5. from typing import ClassVar, Optional, Callable
  6. import app
  7. def role_required(role: str, opt: str):
  8. def required(func):
  9. @wraps(func)
  10. def new_func(*args, **kwargs):
  11. if not current_user.check_role(role): # 检查相应的权限
  12. app.HBlogFlask.print_user_not_allow_opt_log(opt)
  13. return abort(403)
  14. return func(*args, **kwargs)
  15. return new_func
  16. return required
  17. def api_role_required(role: str, opt: str):
  18. def required(func):
  19. @wraps(func)
  20. def new_func(*args, **kwargs):
  21. if not g.user.check_role(role): # 检查相应的权限
  22. app.HBlogFlask.print_user_not_allow_opt_log(opt)
  23. return abort(403)
  24. return func(*args, **kwargs)
  25. return new_func
  26. return required
  27. def form_required(form: ClassVar[FlaskForm], opt: str, callback: Optional[Callable] = None, **kw):
  28. def required(func):
  29. @wraps(func)
  30. def new_func(*args, **kwargs):
  31. f = form()
  32. if not f.validate_on_submit():
  33. app.HBlogFlask.print_form_error_log(opt)
  34. if callback is None:
  35. return abort(404)
  36. return callback(form=f, **kw, **kwargs)
  37. g.form = f
  38. return func(*args, **kwargs)
  39. return new_func
  40. return required