tool.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  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 form_required(form: ClassVar[FlaskForm], opt: str, callback: Optional[Callable] = None, **kw):
  18. def required(func):
  19. @wraps(func)
  20. def new_func(*args, **kwargs):
  21. f = form()
  22. if not f.validate_on_submit():
  23. app.HBlogFlask.print_form_error_log(opt)
  24. if callback is None:
  25. return abort(404)
  26. return callback(form=f, **kw, **kwargs)
  27. g.form = f
  28. return func(*args, **kwargs)
  29. return new_func
  30. return required