1
0
mirror of https://github.com/jumpserver/jumpserver.git synced 2025-05-05 22:56:26 +00:00

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
apps
accounts
models
serializers/account
authentication/models

View File

@ -146,27 +146,21 @@ class Account(AbsConnectivity, LabeledMixin, BaseAccount, JSONFilterMixin):
return False return False
@lazyproperty @lazyproperty
def ds_id(self): def ds(self):
if self.is_ds_account(): if not self.is_ds_account():
return self.asset.ds.id return None
return None if not hasattr(self.asset, 'ds'):
return None
return self.asset.ds
@lazyproperty @lazyproperty
def ds_domain(self): def ds_domain(self):
if self.ds_id: """这个不能去掉perm_account 会动态设置这个值,以更改 full_username"""
return self.asset.ds.domain_name if self.ds and self.ds.domain_name:
return None return self.ds.domain_name
return ''
@lazyproperty @property
def ds(self):
if not self.is_ds_account():
return {}
return {
'id': self.ds_id,
'domain': self.ds_domain,
}
@lazyproperty
def full_username(self): def full_username(self):
if self.ds_domain: if self.ds_domain:
return '{}@{}'.format(self.username, 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, required=False, queryset=Account.objects, allow_null=True, allow_empty=True,
label=_('Su from'), attrs=('id', 'name', 'username') label=_('Su from'), attrs=('id', 'name', 'username')
) )
ds = ObjectRelatedField(read_only=True, label=_('Directory service'), attrs=('id', 'name', 'domain_name'))
class Meta(BaseAccountSerializer.Meta): class Meta(BaseAccountSerializer.Meta):
model = Account model = Account
@ -241,7 +242,7 @@ class AccountSerializer(AccountCreateUpdateSerializerMixin, BaseAccountSerialize
'date_change_secret', 'change_secret_status' 'date_change_secret', 'change_secret_status'
] ]
fields = BaseAccountSerializer.Meta.fields + [ fields = BaseAccountSerializer.Meta.fields + [
'su_from', 'asset', 'version', 'ds_domain', 'ds_id', 'su_from', 'asset', 'version', 'ds',
'source', 'source_id', 'secret_reset', 'source', 'source_id', 'secret_reset',
] + AccountCreateUpdateSerializerMixin.Meta.fields + automation_fields ] + AccountCreateUpdateSerializerMixin.Meta.fields + automation_fields
read_only_fields = BaseAccountSerializer.Meta.read_only_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) cache.delete(lock_key)
return True 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 @lazyproperty
def account_object(self): def account_object(self):
if not self.asset: if not self.asset:
@ -269,6 +279,9 @@ class ConnectionToken(JMSOrgBaseModel):
account = self.asset.all_valid_accounts.filter(id=self.account).first() account = self.asset.all_valid_accounts.filter(id=self.account).first()
if not account.secret and self.input_secret: if not account.secret and self.input_secret:
account.secret = self.input_secret account.secret = self.input_secret
if self.protocol == 'rdp':
self.set_ad_domain_if_need(account)
return account return account
@lazyproperty @lazyproperty