protected ProvisioningResult<UserTO> doUpdate(
final UserPatch userPatch, final boolean self, final boolean nullPriorityAsync) {
UserTO userTO = binder.getUserTO(userPatch.getKey());
Set<String> dynRealmsBefore = new HashSet<>(userTO.getDynRealms());
Pair<UserPatch, List<LogicActions>> before = beforeUpdate(userPatch, userTO.getRealm());
boolean authDynRealms = false;
if (!self
&& before.getLeft().getRealm() != null
&& StringUtils.isNotBlank(before.getLeft().getRealm().getValue())) {
Set<String> effectiveRealms = RealmUtils.getEffective(
AuthContextUtils.getAuthorizations().get(StandardEntitlement.USER_UPDATE),
before.getLeft().getRealm().getValue());
authDynRealms =
securityChecks(effectiveRealms, before.getLeft().getRealm().getValue(), before.getLeft().getKey());
}
Pair<UserPatch, List<PropagationStatus>> updated =
provisioningManager.update(before.getLeft(), nullPriorityAsync);
return afterUpdate(
binder.returnUserTO(binder.getUserTO(updated.getLeft().getKey())),
updated.getRight(),
before.getRight(),
authDynRealms,
dynRealmsBefore);
}