@@ -3943,31 +3943,53 @@ def user_requires_update(self, current_user, current_role):
39433943 else :
39443944 update_user_params ["email" ] = current_email
39453945
3946- # Compare and update role list
3946+ # Compare role lists by resolving desired role names to role IDs.
39473947 desired_role_list = self .want .get ("role_list" )
39483948 current_role_list = current_user .get ("role_list" , [])
39493949 if desired_role_list is not None :
3950- desired_role_name = desired_role_list [0 ].lower ()
3951- if desired_role_name in current_role :
3952- role_id = current_role [desired_role_name ]
3953- if current_role_list [0 ] != role_id :
3954- self .log (
3955- "Updating role list with new role ID {0}." .format (role_id ),
3956- "DEBUG" ,
3957- )
3958- update_user_params ["role_list" ] = [role_id ]
3959- update_needed = True
3950+ desired_role_ids = []
3951+ missing_role_names = []
3952+
3953+ for role_name in desired_role_list :
3954+ desired_role_name = role_name .lower ()
3955+ role_id = current_role .get (desired_role_name )
3956+ if role_id :
3957+ desired_role_ids .append (role_id )
39603958 else :
3961- update_user_params ["role_list" ] = current_role_list
3962- else :
3959+ missing_role_names .append (role_name )
3960+
3961+ if missing_role_names :
39633962 self .log (
3964- "Role {0} not found in current_role. Setting role list to empty." .format (
3965- desired_role_name
3963+ "Role(s) {0} not found in current_role. Setting role list to empty." .format (
3964+ ", " . join ( missing_role_names )
39663965 ),
39673966 "DEBUG" ,
39683967 )
39693968 update_user_params ["role_list" ] = []
39703969 update_needed = True
3970+ else :
3971+ normalized_current_role_ids = []
3972+ for role in current_role_list :
3973+ normalized_role = role .lower ()
3974+ normalized_current_role_ids .append (
3975+ current_role .get (normalized_role , role ).lower ()
3976+ )
3977+
3978+ normalized_desired_role_ids = [
3979+ role_id .lower () for role_id in desired_role_ids
3980+ ]
3981+
3982+ if set (normalized_current_role_ids ) != set (normalized_desired_role_ids ):
3983+ self .log (
3984+ "Updating role list with new role IDs {0}." .format (
3985+ desired_role_ids
3986+ ),
3987+ "DEBUG" ,
3988+ )
3989+ update_user_params ["role_list" ] = desired_role_ids
3990+ update_needed = True
3991+ else :
3992+ update_user_params ["role_list" ] = current_role_list
39713993 else :
39723994 update_user_params ["role_list" ] = current_role_list
39733995
0 commit comments