From 73d4a778818024e225f5f035061e8974ae19b6c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Tue, 11 Jul 2017 12:17:06 +0200 Subject: [PATCH] Role change blinker: make comparison set-based This makes it impervious to changes in order and duplicate roles. --- pillar/api/users/hooks.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pillar/api/users/hooks.py b/pillar/api/users/hooks.py index 75655dab..06699439 100644 --- a/pillar/api/users/hooks.py +++ b/pillar/api/users/hooks.py @@ -70,13 +70,16 @@ def push_updated_user_to_algolia(user, original): def send_blinker_signal_roles_changed(user, original): """Sends a Blinker signal that the user roles were changed, so others can respond.""" - if user.get('roles') == original.get('roles'): + current_roles = set(user.get('roles', [])) + original_roles = set(original.get('roles', [])) + + if current_roles == original_roles: return from pillar.api.service import signal_user_changed_role log.info('User %s changed roles to %s, sending Blinker signal', - user.get('_id'), user.get('roles')) + user.get('_id'), current_roles) signal_user_changed_role.send(current_app, user=user)