From 50bb04de8de164b5b3e293818a55eec130586a8b Mon Sep 17 00:00:00 2001 From: xinwen Date: Tue, 24 Nov 2020 11:40:46 +0800 Subject: [PATCH] =?UTF-8?q?refactor(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=20(#5084?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/perms/signals_handler.py | 59 +++++++++++++++++++++-------------- apps/users/signals_handler.py | 11 ------- 2 files changed, 36 insertions(+), 34 deletions(-) diff --git a/apps/perms/signals_handler.py b/apps/perms/signals_handler.py index decffde54..5b33fcb35 100644 --- a/apps/perms/signals_handler.py +++ b/apps/perms/signals_handler.py @@ -16,6 +16,42 @@ from .models import AssetPermission, RemoteAppPermission logger = get_logger(__file__) +def handle_rebuild_user_tree(instance, action, reverse, pk_set, **kwargs): + if action.startswith('post'): + if reverse: + create_rebuild_user_tree_task(pk_set) + else: + create_rebuild_user_tree_task([instance.id]) + + +def handle_bind_groups_systemuser(instance, action, reverse, pk_set, **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) + + +@receiver(m2m_changed, sender=User.groups.through) +def on_user_groups_change(**kwargs): + handle_rebuild_user_tree(**kwargs) + handle_bind_groups_systemuser(**kwargs) + + @receiver([pre_save], sender=AssetPermission) def on_asset_perm_deactive(instance: AssetPermission, **kwargs): try: @@ -208,26 +244,3 @@ 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) diff --git a/apps/users/signals_handler.py b/apps/users/signals_handler.py index 3fdf6ddc6..a25d4ea20 100644 --- a/apps/users/signals_handler.py +++ b/apps/users/signals_handler.py @@ -2,14 +2,12 @@ # from django.dispatch import receiver -from django.db.models.signals import m2m_changed from django_auth_ldap.backend import populate_user from django.conf import settings from django_cas_ng.signals import cas_user_authenticated from jms_oidc_rp.signals import openid_create_or_update_user -from perms.tasks import create_rebuild_user_tree_task from common.utils import get_logger from .signals import post_user_create from .models import User @@ -27,15 +25,6 @@ def on_user_create(sender, user=None, **kwargs): send_user_created_mail(user) -@receiver(m2m_changed, sender=User.groups.through) -def on_user_groups_change(instance, action, reverse, pk_set, **kwargs): - if action.startswith('post'): - if reverse: - create_rebuild_user_tree_task(pk_set) - else: - create_rebuild_user_tree_task([instance.id]) - - @receiver(cas_user_authenticated) def on_cas_user_authenticated(sender, user, created, **kwargs): if created: