mirror of https://github.com/jumpserver/jumpserver
perf: 修改 risk check
parent
39f266eb71
commit
cf8c4ea050
|
@ -189,12 +189,12 @@ class CheckAccountManager(BaseManager):
|
|||
ori_risk_map = {}
|
||||
|
||||
for risk in account_risks:
|
||||
key = f'{risk.asset_id}_{risk.username}_{risk.risk}'
|
||||
key = f'{risk.account_id}_{risk.risk}'
|
||||
ori_risk_map[key] = risk
|
||||
|
||||
now = timezone.now().isoformat()
|
||||
for d in self.batch_risks:
|
||||
key = f'{d["account"].asset_id}_{d["account"].username}_{d["risk"]}'
|
||||
key = f'{d["account"].id}_{d["risk"]}'
|
||||
origin_risk = ori_risk_map.get(key)
|
||||
|
||||
if origin_risk and origin_risk.status != ConfirmOrIgnore.pending:
|
||||
|
@ -209,6 +209,7 @@ class CheckAccountManager(BaseManager):
|
|||
update_risk(origin_risk)
|
||||
else:
|
||||
create_risk({
|
||||
"account": d["account"],
|
||||
"asset": d["account"].asset,
|
||||
"username": d["account"].username,
|
||||
"risk": d["risk"],
|
||||
|
|
|
@ -83,8 +83,8 @@ class AnalyseAccountRisk:
|
|||
self.now = timezone.now()
|
||||
self.pending_add_risks = []
|
||||
|
||||
def _analyse_item_changed(self, ori_account, d):
|
||||
diff = get_items_diff(ori_account, d)
|
||||
def _analyse_item_changed(self, ori_ga, d):
|
||||
diff = get_items_diff(ori_ga, d)
|
||||
if not diff:
|
||||
return
|
||||
|
||||
|
@ -94,8 +94,9 @@ class AnalyseAccountRisk:
|
|||
continue
|
||||
risks.append(
|
||||
dict(
|
||||
asset_id=str(ori_account.asset_id),
|
||||
username=ori_account.username,
|
||||
asset_id=str(ori_ga.asset_id),
|
||||
username=ori_ga.username,
|
||||
gathered_account=ori_ga,
|
||||
risk=k + "_changed",
|
||||
detail={"diff": v},
|
||||
)
|
||||
|
@ -153,13 +154,13 @@ class AnalyseAccountRisk:
|
|||
def _update_risk(self, account):
|
||||
return account
|
||||
|
||||
def analyse_risk(self, asset, ori_account, d, sys_found):
|
||||
def analyse_risk(self, asset, ga, d, sys_found):
|
||||
if not self.check_risk:
|
||||
return
|
||||
|
||||
basic = {"asset": asset, "username": d["username"]}
|
||||
if ori_account:
|
||||
self._analyse_item_changed(ori_account, d)
|
||||
basic = {"asset": asset, "username": d["username"], 'gathered_account': ga.id}
|
||||
if ga:
|
||||
self._analyse_item_changed(ga, d)
|
||||
elif not sys_found:
|
||||
self._create_risk(
|
||||
dict(
|
||||
|
@ -168,7 +169,7 @@ class AnalyseAccountRisk:
|
|||
details=[{"datetime": self.now.isoformat()}],
|
||||
)
|
||||
)
|
||||
self._analyse_datetime_changed(ori_account, d, asset, d["username"])
|
||||
self._analyse_datetime_changed(ga, d, asset, d["username"])
|
||||
|
||||
|
||||
class GatherAccountsManager(AccountBasePlaybookManager):
|
||||
|
@ -363,11 +364,12 @@ class GatherAccountsManager(AccountBasePlaybookManager):
|
|||
"{}_{}".format(asset.id, username)
|
||||
)
|
||||
if not ori_account:
|
||||
self.create_gathered_account(d)
|
||||
ga = self.create_gathered_account(d)
|
||||
else:
|
||||
ga = ori_account
|
||||
self.update_gathered_account(ori_account, d)
|
||||
ori_found = username in ori_users
|
||||
risk_analyser.analyse_risk(asset, ori_account, d, ori_found)
|
||||
risk_analyser.analyse_risk(asset, ga, d, ori_found)
|
||||
|
||||
self.create_gathered_account.finish()
|
||||
self.update_gathered_account.finish()
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
# Generated by Django 4.1.13 on 2025-01-13 07:36
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("accounts", "0026_accountrisk_account"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="accountrisk",
|
||||
name="gathered_account",
|
||||
field=models.ForeignKey(
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="risks",
|
||||
to="accounts.gatheredaccount",
|
||||
),
|
||||
),
|
||||
]
|
|
@ -60,8 +60,14 @@ class RiskChoice(TextChoices):
|
|||
class AccountRisk(JMSOrgBaseModel):
|
||||
asset = models.ForeignKey('assets.Asset', on_delete=models.CASCADE, related_name='risks', verbose_name=_('Asset'))
|
||||
username = models.CharField(max_length=32, verbose_name=_('Username'))
|
||||
account = models.ForeignKey('accounts.Account', on_delete=models.CASCADE, related_name='risks',
|
||||
verbose_name=_('Account'), null=True)
|
||||
account = models.ForeignKey(
|
||||
'accounts.Account', on_delete=models.CASCADE, related_name='risks',
|
||||
verbose_name=_('Account'), null=True
|
||||
)
|
||||
gathered_account = models.ForeignKey(
|
||||
'accounts.GatheredAccount', on_delete=models.CASCADE,
|
||||
related_name='risks', null=True
|
||||
)
|
||||
risk = models.CharField(max_length=128, verbose_name=_('Risk'), choices=RiskChoice.choices)
|
||||
status = models.CharField(max_length=32, choices=ConfirmOrIgnore.choices, default=ConfirmOrIgnore.pending,
|
||||
blank=True, verbose_name=_('Status'))
|
||||
|
|
Loading…
Reference in New Issue