diff --git a/apps/applications/models/application.py b/apps/applications/models/application.py index a6552fffd..4cb488e23 100644 --- a/apps/applications/models/application.py +++ b/apps/applications/models/application.py @@ -8,6 +8,7 @@ from django.conf import settings from orgs.mixins.models import OrgModelMixin from common.mixins import CommonModelMixin from common.tree import TreeNode +from common.utils import is_uuid from assets.models import Asset, SystemUser from ..utils import KubernetesTree @@ -267,12 +268,12 @@ class Application(CommonModelMixin, OrgModelMixin, ApplicationTreeNodeMixin): 'parameters': parameters } - def get_remote_app_asset(self): + def get_remote_app_asset(self, raise_exception=True): asset_id = self.attrs.get('asset') - if not asset_id: + if is_uuid(asset_id): + return Asset.objects.filter(id=asset_id).first() + if raise_exception: raise ValueError("Remote App not has asset attr") - asset = Asset.objects.filter(id=asset_id).first() - return asset class ApplicationUser(SystemUser): diff --git a/apps/assets/models/user.py b/apps/assets/models/user.py index 678e5f8cf..ce0029768 100644 --- a/apps/assets/models/user.py +++ b/apps/assets/models/user.py @@ -133,6 +133,14 @@ class AuthMixin: self.password = password def load_app_more_auth(self, app_id=None, username=None, user_id=None): + from applications.models import Application + app = get_object_or_none(Application, pk=app_id) + if app and app.category_remote_app: + # Remote app + self._load_remoteapp_more_auth(app, username, user_id) + return + + # Other app self._clean_auth_info_if_manual_login_mode() # 加载临时认证信息 if self.login_mode == self.LOGIN_MANUAL: @@ -148,6 +156,11 @@ class AuthMixin: _username = username self.username = _username + def _load_remoteapp_more_auth(self, app, username, user_id): + asset = app.get_remote_app_asset(raise_exception=False) + if asset: + self.load_asset_more_auth(asset_id=asset.id, username=username, user_id=user_id) + def load_asset_special_auth(self, asset, username=''): """ AuthBook 的数据状态