From fbe5f9a63a62cd88cf3d9bceea96dd987a59d008 Mon Sep 17 00:00:00 2001 From: fit2bot <68588906+fit2bot@users.noreply.github.com> Date: Wed, 15 Sep 2021 19:11:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E8=B5=84=E4=BA=A7?= =?UTF-8?q?=E5=92=8C=E7=89=B9=E6=9D=83=E7=94=A8=E6=88=B7=E5=8F=91=E7=94=9F?= =?UTF-8?q?=E5=8F=98=E5=8C=96=E6=97=B6=EF=BC=8C=E6=9B=B4=E6=96=B0=E8=B5=84?= =?UTF-8?q?=E4=BA=A7=E7=9A=84admin=5Fuser=20(#6871)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 修改资产和特权用户发生变化时,更新资产的admin_user * fix: 修改资产和特权用户发生变化时,更新资产的admin_user * fix: 修改资产和特权用户发生变化时,更新资产的admin_user Co-authored-by: Michael Bai --- apps/assets/models/authbook.py | 23 ++++++++++++++++++++++- apps/assets/signals_handler/authbook.py | 11 ++++++++--- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/apps/assets/models/authbook.py b/apps/assets/models/authbook.py index c4e39bcd4..180dc90f7 100644 --- a/apps/assets/models/authbook.py +++ b/apps/assets/models/authbook.py @@ -5,9 +5,12 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ from simple_history.models import HistoricalRecords -from common.utils import lazyproperty +from common.utils import lazyproperty, get_logger from .base import BaseUser, AbsConnectivity +logger = get_logger(__name__) + + __all__ = ['AuthBook'] @@ -93,6 +96,24 @@ class AuthBook(BaseUser, AbsConnectivity): i.comment = 'Update triggered by account {}'.format(self.id) i.save(update_fields=['password', 'private_key', 'public_key']) + def remove_asset_admin_user_if_need(self): + if not self.asset or not self.asset.admin_user: + return + if not self.systemuser.is_admin_user: + return + logger.debug('Remove asset admin user: {} {}'.format(self.asset, self.systemuser)) + self.asset.admin_user = None + self.asset.save() + + def update_asset_admin_user_if_need(self): + if not self.systemuser or not self.systemuser.is_admin_user: + return + if not self.asset or self.asset.admin_user == self.systemuser: + return + logger.debug('Update asset admin user: {} {}'.format(self.asset, self.systemuser)) + self.asset.admin_user = self.systemuser + self.asset.save() + def __str__(self): return self.smart_name diff --git a/apps/assets/signals_handler/authbook.py b/apps/assets/signals_handler/authbook.py index 2a149d57a..7564e738d 100644 --- a/apps/assets/signals_handler/authbook.py +++ b/apps/assets/signals_handler/authbook.py @@ -1,7 +1,7 @@ from django.dispatch import receiver from django.apps import apps from simple_history.signals import pre_create_historical_record -from django.db.models.signals import post_save, pre_save +from django.db.models.signals import post_save, pre_save, post_delete from common.utils import get_logger from ..models import AuthBook, SystemUser @@ -28,10 +28,15 @@ def pre_create_historical_record_callback(sender, history_instance=None, **kwarg setattr(history_instance, attr, system_user_attr_value) +@receiver(post_delete, sender=AuthBook) +def on_authbook_post_delete(sender, instance, **kwargs): + instance.remove_asset_admin_user_if_need() + + @receiver(post_save, sender=AuthBook) def on_authbook_post_create(sender, instance, **kwargs): - if not instance.systemuser: - instance.sync_to_system_user_account() + instance.sync_to_system_user_account() + instance.update_asset_admin_user_if_need() @receiver(pre_save, sender=AuthBook)