KEYCLOAK-17765 Remove doubled synchronization of UserPolicies on UserRemovedEvent
This commit is contained in:
parent
6e7898039b
commit
4b2c20c871
1 changed files with 0 additions and 41 deletions
|
@ -19,10 +19,8 @@
|
||||||
package org.keycloak.authorization.policy.provider.user;
|
package org.keycloak.authorization.policy.provider.user;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
@ -30,17 +28,12 @@ import java.util.stream.Collectors;
|
||||||
import org.keycloak.Config;
|
import org.keycloak.Config;
|
||||||
import org.keycloak.authorization.AuthorizationProvider;
|
import org.keycloak.authorization.AuthorizationProvider;
|
||||||
import org.keycloak.authorization.model.Policy;
|
import org.keycloak.authorization.model.Policy;
|
||||||
import org.keycloak.authorization.model.ResourceServer;
|
|
||||||
import org.keycloak.authorization.policy.provider.PolicyProvider;
|
import org.keycloak.authorization.policy.provider.PolicyProvider;
|
||||||
import org.keycloak.authorization.policy.provider.PolicyProviderFactory;
|
import org.keycloak.authorization.policy.provider.PolicyProviderFactory;
|
||||||
import org.keycloak.authorization.store.PolicyStore;
|
|
||||||
import org.keycloak.authorization.store.ResourceServerStore;
|
|
||||||
import org.keycloak.authorization.store.StoreFactory;
|
|
||||||
import org.keycloak.models.KeycloakSession;
|
import org.keycloak.models.KeycloakSession;
|
||||||
import org.keycloak.models.KeycloakSessionFactory;
|
import org.keycloak.models.KeycloakSessionFactory;
|
||||||
import org.keycloak.models.RealmModel;
|
import org.keycloak.models.RealmModel;
|
||||||
import org.keycloak.models.UserModel;
|
import org.keycloak.models.UserModel;
|
||||||
import org.keycloak.models.UserModel.UserRemovedEvent;
|
|
||||||
import org.keycloak.models.UserProvider;
|
import org.keycloak.models.UserProvider;
|
||||||
import org.keycloak.representations.idm.authorization.PolicyRepresentation;
|
import org.keycloak.representations.idm.authorization.PolicyRepresentation;
|
||||||
import org.keycloak.representations.idm.authorization.UserPolicyRepresentation;
|
import org.keycloak.representations.idm.authorization.UserPolicyRepresentation;
|
||||||
|
@ -173,41 +166,7 @@ public class UserPolicyProviderFactory implements PolicyProviderFactory<UserPoli
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void postInit(KeycloakSessionFactory factory) {
|
public void postInit(KeycloakSessionFactory factory) {
|
||||||
factory.register(event -> {
|
|
||||||
if (event instanceof UserRemovedEvent) {
|
|
||||||
KeycloakSession keycloakSession = ((UserRemovedEvent) event).getKeycloakSession();
|
|
||||||
AuthorizationProvider provider = keycloakSession.getProvider(AuthorizationProvider.class);
|
|
||||||
StoreFactory storeFactory = provider.getStoreFactory();
|
|
||||||
PolicyStore policyStore = storeFactory.getPolicyStore();
|
|
||||||
UserModel removedUser = ((UserRemovedEvent) event).getUser();
|
|
||||||
RealmModel realm = ((UserRemovedEvent) event).getRealm();
|
|
||||||
ResourceServerStore resourceServerStore = storeFactory.getResourceServerStore();
|
|
||||||
realm.getClientsStream().forEach(clientModel -> {
|
|
||||||
ResourceServer resourceServer = resourceServerStore.findById(clientModel.getId());
|
|
||||||
|
|
||||||
if (resourceServer != null) {
|
|
||||||
policyStore.findByType(getId(), resourceServer.getId()).forEach(policy -> {
|
|
||||||
List<String> users = new ArrayList<>();
|
|
||||||
|
|
||||||
for (String userId : getUsers(policy)) {
|
|
||||||
if (!userId.equals(removedUser.getId())) {
|
|
||||||
users.add(userId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
// just update the policy, let the UserSynchronizer to actually remove the policy if necessary
|
|
||||||
if (!users.isEmpty()) {
|
|
||||||
policy.putConfig("users", JsonSerialization.writeValueAsString(users));
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException("Error while synchronizing users with policy [" + policy.getName() + "].", e);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue