From a72098632b7713e3663148c1de4bc9da6e796f07 Mon Sep 17 00:00:00 2001 From: xinwen Date: Sat, 21 Nov 2020 22:23:10 +0800 Subject: [PATCH] =?UTF-8?q?fix(perms):=20=E5=9C=A8=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=89=80=E7=BB=91=E5=AE=9A=E7=9A=84=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E8=A7=84=E5=88=99=E4=B8=AD=EF=BC=8C=E5=A6=82=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E7=BB=99=E7=94=A8=E6=88=B7=E7=BB=84=EF=BC=8C=E5=BD=93?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=BB=84=E5=A2=9E=E5=8A=A0=E6=88=90=E5=91=98?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E5=8A=A8=E6=80=81=E7=B3=BB=E7=BB=9F=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=B8=8B=E6=B2=A1=E6=9C=89=E7=9B=B8=E5=BA=94=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E7=94=A8=E6=88=B7=EF=BC=8C=E5=9B=A0=E6=AD=A4=E4=B9=9F?= =?UTF-8?q?=E4=B8=8D=E4=BC=9A=E8=87=AA=E5=8A=A8=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/perms/signals_handler.py | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) 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)