From 73db1bf50cc786cff107fd8a7df294999f949e9b Mon Sep 17 00:00:00 2001 From: jiangweidong Date: Mon, 9 Oct 2023 13:55:55 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81LDAP=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=BB=84=E5=8F=98=E6=9B=B4=E6=97=B6=EF=BC=8CJS?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=8F=98=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/settings/utils/ldap.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/apps/settings/utils/ldap.py b/apps/settings/utils/ldap.py index d130ac41a..a91cb5662 100644 --- a/apps/settings/utils/ldap.py +++ b/apps/settings/utils/ldap.py @@ -426,7 +426,21 @@ class LDAPImportUtil(object): return errors @staticmethod - def bind_org(org, users, group_users_mapper): + def exit_user_group(user_groups_mapper): + # 通过对比查询本次导入用户需要移除的用户组 + group_remove_users_mapper = defaultdict(set) + for user, current_groups in user_groups_mapper.items(): + old_groups = set(user.groups.all()) + exit_groups = old_groups - current_groups + logger.debug(f'Ldap user {user} exits user groups {exit_groups}') + for g in exit_groups: + group_remove_users_mapper[g].add(user) + + # 根据用户组统一移除用户 + for g, rm_users in group_remove_users_mapper.items(): + g.users.remove(*rm_users) + + def bind_org(self, org, users, group_users_mapper): if not org: return if org.is_root(): @@ -436,11 +450,15 @@ class LDAPImportUtil(object): org.add_member(user) # add user to group with tmp_to_org(org): + user_groups_mapper = defaultdict(set) for group_name, users in group_users_mapper.items(): group, created = UserGroup.objects.get_or_create( name=group_name, defaults={'name': group_name} ) + for user in users: + user_groups_mapper[user].add(group) group.users.add(*users) + self.exit_user_group(user_groups_mapper) class LDAPTestUtil(object):