perf: update ad

This commit is contained in:
ibuler 2025-04-08 18:41:11 +08:00 committed by 老广
parent 76e57b9a3e
commit 4cc1687bf8
3 changed files with 26 additions and 18 deletions

View File

@ -146,27 +146,21 @@ class Account(AbsConnectivity, LabeledMixin, BaseAccount, JSONFilterMixin):
return False
@lazyproperty
def ds_id(self):
if self.is_ds_account():
return self.asset.ds.id
return None
def ds(self):
if not self.is_ds_account():
return None
if not hasattr(self.asset, 'ds'):
return None
return self.asset.ds
@lazyproperty
def ds_domain(self):
if self.ds_id:
return self.asset.ds.domain_name
return None
"""这个不能去掉perm_account 会动态设置这个值,以更改 full_username"""
if self.ds and self.ds.domain_name:
return self.ds.domain_name
return ''
@lazyproperty
def ds(self):
if not self.is_ds_account():
return {}
return {
'id': self.ds_id,
'domain': self.ds_domain,
}
@lazyproperty
@property
def full_username(self):
if self.ds_domain:
return '{}@{}'.format(self.username, self.ds_domain)

View File

@ -233,6 +233,7 @@ class AccountSerializer(AccountCreateUpdateSerializerMixin, BaseAccountSerialize
required=False, queryset=Account.objects, allow_null=True, allow_empty=True,
label=_('Su from'), attrs=('id', 'name', 'username')
)
ds = ObjectRelatedField(read_only=True, label=_('Directory service'), attrs=('id', 'name', 'domain_name'))
class Meta(BaseAccountSerializer.Meta):
model = Account
@ -241,7 +242,7 @@ class AccountSerializer(AccountCreateUpdateSerializerMixin, BaseAccountSerialize
'date_change_secret', 'change_secret_status'
]
fields = BaseAccountSerializer.Meta.fields + [
'su_from', 'asset', 'version', 'ds_domain', 'ds_id',
'su_from', 'asset', 'version', 'ds',
'source', 'source_id', 'secret_reset',
] + AccountCreateUpdateSerializerMixin.Meta.fields + automation_fields
read_only_fields = BaseAccountSerializer.Meta.read_only_fields + automation_fields

View File

@ -255,6 +255,16 @@ class ConnectionToken(JMSOrgBaseModel):
cache.delete(lock_key)
return True
def set_ad_domain_if_need(self, account):
rdp = self.asset.platform.protocols.filter(name='rdp').first()
if not rdp or not rdp.setting:
return
ad_domain = rdp.setting.get('ad_domain')
if ad_domain:
# serializer account username 用的是 full_username 所以这么设置
account.ds_domain = ad_domain
@lazyproperty
def account_object(self):
if not self.asset:
@ -269,6 +279,9 @@ class ConnectionToken(JMSOrgBaseModel):
account = self.asset.all_valid_accounts.filter(id=self.account).first()
if not account.secret and self.input_secret:
account.secret = self.input_secret
if self.protocol == 'rdp':
self.set_ad_domain_if_need(account)
return account
@lazyproperty