mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-09-23 04:20:27 +00:00
perf: directory service db
This commit is contained in:
@@ -175,6 +175,10 @@ class Asset(NodesRelationMixin, LabeledMixin, AbsConnectivity, JSONFilterMixin,
|
||||
nodes = models.ManyToManyField(
|
||||
'assets.Node', default=default_node, related_name='assets', verbose_name=_("Nodes")
|
||||
)
|
||||
directory_services = models.ManyToManyField(
|
||||
'assets.DirectoryService', related_name='assets',
|
||||
verbose_name=_("Directory services")
|
||||
)
|
||||
is_active = models.BooleanField(default=True, verbose_name=_('Active'))
|
||||
gathered_info = models.JSONField(verbose_name=_('Gathered info'), default=dict, blank=True) # 资产的一些信息,如 硬件信息
|
||||
custom_info = models.JSONField(verbose_name=_('Custom info'), default=dict)
|
||||
@@ -201,6 +205,10 @@ class Asset(NodesRelationMixin, LabeledMixin, AbsConnectivity, JSONFilterMixin,
|
||||
info[i.name] = v
|
||||
return info
|
||||
|
||||
@lazyproperty
|
||||
def is_directory_service(self):
|
||||
return self.category == const.Category.DS and hasattr(self, 'ds')
|
||||
|
||||
@lazyproperty
|
||||
def spec_info(self):
|
||||
instance = getattr(self, self.category, None)
|
||||
@@ -247,16 +255,16 @@ class Asset(NodesRelationMixin, LabeledMixin, AbsConnectivity, JSONFilterMixin,
|
||||
|
||||
@property
|
||||
def all_accounts(self):
|
||||
if not self.joined_dir_svc_id:
|
||||
if not self.joined_dir_svc_ids:
|
||||
queryset = self.accounts.all()
|
||||
else:
|
||||
queryset = self.accounts.model.objects.filter(asset__in=[self.id, self.joined_dir_svc_id])
|
||||
queryset = self.accounts.model.objects.filter(asset__in=[self.id, *self.joined_dir_svc_ids])
|
||||
return queryset
|
||||
|
||||
@lazyproperty
|
||||
def all_valid_accounts(self):
|
||||
queryset = (self.all_accounts.filter(is_active=True)
|
||||
.prefetch_related('asset', 'asset__platform', 'asset__platform__ds'))
|
||||
.prefetch_related('asset', 'asset__platform'))
|
||||
return queryset
|
||||
|
||||
@lazyproperty
|
||||
@@ -277,11 +285,11 @@ class Asset(NodesRelationMixin, LabeledMixin, AbsConnectivity, JSONFilterMixin,
|
||||
return self.category == const.Category.DS
|
||||
|
||||
@property
|
||||
def joined_dir_svc_id(self):
|
||||
return self.platform.ds_id
|
||||
def joined_dir_svc_ids(self):
|
||||
return self.directory_services.values_list('id', flat=True)
|
||||
|
||||
def is_joined_ad(self):
|
||||
if self.joined_dir_svc_id:
|
||||
if self.joined_dir_svc_ids:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
@@ -103,10 +103,6 @@ class Platform(LabeledMixin, JMSBaseModel):
|
||||
)
|
||||
domain_enabled = models.BooleanField(default=True, verbose_name=_("Gateway enabled"))
|
||||
ds_enabled = models.BooleanField(default=False, verbose_name=_("DS enabled"))
|
||||
ds = models.ForeignKey(
|
||||
'DirectoryService', on_delete=models.SET_NULL, null=True, blank=True,
|
||||
verbose_name=_("Directory service"), related_name='ds_platforms'
|
||||
)
|
||||
# 账号有关的
|
||||
su_enabled = models.BooleanField(default=False, verbose_name=_("Su enabled"))
|
||||
su_method = models.CharField(max_length=32, blank=True, null=True, verbose_name=_("Su method"))
|
||||
|
Reference in New Issue
Block a user