您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. from functools import wraps
  2. from flask_login import current_user
  3. from flask_restful import Resource
  4. from werkzeug.exceptions import NotFound
  5. from controllers.console.explore.error import AppAccessDeniedError
  6. from controllers.console.wraps import account_initialization_required
  7. from extensions.ext_database import db
  8. from libs.login import login_required
  9. from models import InstalledApp
  10. from services.app_service import AppService
  11. from services.enterprise.enterprise_service import EnterpriseService
  12. from services.feature_service import FeatureService
  13. def installed_app_required(view=None):
  14. def decorator(view):
  15. @wraps(view)
  16. def decorated(*args, **kwargs):
  17. if not kwargs.get("installed_app_id"):
  18. raise ValueError("missing installed_app_id in path parameters")
  19. installed_app_id = kwargs.get("installed_app_id")
  20. installed_app_id = str(installed_app_id)
  21. del kwargs["installed_app_id"]
  22. installed_app = (
  23. db.session.query(InstalledApp)
  24. .filter(
  25. InstalledApp.id == str(installed_app_id), InstalledApp.tenant_id == current_user.current_tenant_id
  26. )
  27. .first()
  28. )
  29. if installed_app is None:
  30. raise NotFound("Installed app not found")
  31. if not installed_app.app:
  32. db.session.delete(installed_app)
  33. db.session.commit()
  34. raise NotFound("Installed app not found")
  35. return view(installed_app, *args, **kwargs)
  36. return decorated
  37. if view:
  38. return decorator(view)
  39. return decorator
  40. def user_allowed_to_access_app(view=None):
  41. def decorator(view):
  42. @wraps(view)
  43. def decorated(installed_app: InstalledApp, *args, **kwargs):
  44. feature = FeatureService.get_system_features()
  45. if feature.webapp_auth.enabled:
  46. app_id = installed_app.app_id
  47. app_code = AppService.get_app_code_by_id(app_id)
  48. res = EnterpriseService.WebAppAuth.is_user_allowed_to_access_webapp(
  49. user_id=str(current_user.id),
  50. app_code=app_code,
  51. )
  52. if not res:
  53. raise AppAccessDeniedError()
  54. return view(installed_app, *args, **kwargs)
  55. return decorated
  56. if view:
  57. return decorator(view)
  58. return decorator
  59. class InstalledAppResource(Resource):
  60. # must be reversed if there are multiple decorators
  61. method_decorators = [
  62. user_allowed_to_access_app,
  63. installed_app_required,
  64. account_initialization_required,
  65. login_required,
  66. ]