diff --git a/src/main/java/sh/libre/scim/event/ScimEventListenerProvider.java b/src/main/java/sh/libre/scim/event/ScimEventListenerProvider.java index 2a48ec6982d7e8ed39a1d4926ad8f6267da92809..58d791c3df871ed922487a84ddd10c6297ce4f4a 100644 --- a/src/main/java/sh/libre/scim/event/ScimEventListenerProvider.java +++ b/src/main/java/sh/libre/scim/event/ScimEventListenerProvider.java @@ -91,6 +91,24 @@ public class ScimEventListenerProvider implements EventListenerProvider { dispatcher.run((client) -> client.replace(UserAdapter.class, user)); } } + if (event.getResourceType() == ResourceType.REALM_ROLE_MAPPING) { + Pattern pattern = Pattern.compile("^(.+)/(.+)/role-mappings"); + Matcher matcher = pattern.matcher(event.getResourcePath()); + if (matcher.find()) { + var type = matcher.group(1); + var id = matcher.group(2); + LOGGER.infof("%s %s %s roles", event.getOperationType(), type, id); + if (type.equals("users")) { + var user = getUser(id); + dispatcher.run((client) -> client.replace(UserAdapter.class, user)); + } else if (type.equals("groups")) { + var group = getGroup(id); + session.users().getGroupMembersStream(session.getContext().getRealm(), group).forEach(user -> { + dispatcher.run((client) -> client.replace(UserAdapter.class, user)); + }); + } + } + } } private UserModel getUser(String id) {