diff --git a/apps/perms/signals_handler.py b/apps/perms/signals_handler.py index fe39804f6..decffde54 100644 --- a/apps/perms/signals_handler.py +++ b/apps/perms/signals_handler.py @@ -6,7 +6,7 @@ from django.dispatch import receiver from perms.tasks import create_rebuild_user_tree_task, \ create_rebuild_user_tree_task_by_related_nodes_or_assets from users.models import User, UserGroup -from assets.models import Asset +from assets.models import Asset, SystemUser from common.utils import get_logger from common.exceptions import M2MReverseNotAllowed from common.const.signals import POST_ADD, POST_REMOVE, POST_CLEAR @@ -208,3 +208,26 @@ def on_node_asset_change(action, instance, reverse, pk_set, **kwargs): node_pk_set = pk_set create_rebuild_user_tree_task_by_related_nodes_or_assets.delay(node_pk_set, asset_pk_set) + + +@receiver(m2m_changed, sender=User.groups.through) +def on_user_groups_change(instance, action, reverse, pk_set, model, **kwargs): + """ + UserGroup 增加 User 时,增加的 User 需要与 UserGroup 关联的动态系统用户相关联 + """ + user: User + + if action != POST_ADD: + return + + if not reverse: + # 一个用户添加了多个用户组 + users_id = [instance.id] + system_users = SystemUser.objects.filter(groups__id__in=pk_set).distinct() + else: + # 一个用户组添加了多个用户 + users_id = pk_set + system_users = SystemUser.objects.filter(groups__id=instance.pk).distinct() + + for system_user in system_users: + system_user.users.add(*users_id)