ensure no duplicates in users or roles

This commit is contained in:
Valentin Deniaud 2024-02-28 10:00:32 +01:00
parent 0ce6428521
commit f3d96794ea
1 changed files with 8 additions and 5 deletions

View File

@ -29,8 +29,10 @@ if hasattr(connection, 'tenant') and hasattr(connection.tenant, 'domain_url'):
logger.info('=== Starting fusion at %s ===', timezone.now().strftime('%Y-%m-%dT%H:%M:%S'))
agent_users = User.objects.filter(email__icontains='@cd-essonne.fr', saml_identifiers__isnull=False).order_by(
'-last_login', 'first_name'
agent_users = (
User.objects.filter(email__icontains='@cd-essonne.fr', saml_identifiers__isnull=False)
.distinct()
.order_by('-last_login', 'first_name')
)
agent_users_by_email = collections.defaultdict(list)
@ -42,9 +44,10 @@ for email, users in agent_users_by_email.items():
if len(users) == 1:
continue
roles = set()
roles = {}
for user in users:
roles.update(user.roles.all())
for role in user.roles.all():
roles[role.id] = role
user_to_keep, users_to_disable = users[0], users[1:]
@ -62,7 +65,7 @@ def do_fusion(users):
for user in users:
logger.info('* Processing user %s', get_user_detail(user))
for role in sorted(user._roles_to_add, key=lambda x: x.name.lower()):
for role in sorted(user._roles_to_add.values(), key=lambda x: x.name.lower()):
logger.info('Adding role %s', role)
user.roles.add(role)