Role change blinker: make comparison set-based

This makes it impervious to changes in order and duplicate roles.
This commit is contained in:
Sybren A. Stüvel 2017-07-11 12:17:06 +02:00
parent c974b388b6
commit 73d4a77881

View File

@ -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)