i am trying to remove identitites that are not assigned to any roles. since we only have getAssignedRoles(); method to grab and remove entitlements from identity.
here i am using identity links .getEntitlements(); in order to grab entitlements which are not assigned to any role but the issue is how i remove the entitlement only from links because when i terminate the links whole identity links are getting deleted.. while i just want the entitlements to be removed.
String identityName = "XYZ123";
Identity identity = context.getObjectByName(Identity.class, identityName);
List linksWithEntitlementsToRemove = new ArrayList();
int entitlementCount = 0;
List accountLinks = identity.getLinks();
if (accountLinks != null) {
for (Link accountLink : accountLinks) {
try {
List linkEntitlements = accountLink.getEntitlements(Locale.getDefault(), "");
if (linkEntitlements != null && !linkEntitlements.isEmpty()) {
entitlementCount += linkEntitlements.size();
logger.debug("Found " + linkEntitlements.size() + " entitlements for account: " + accountLink.getNativeIdentity());
linksWithEntitlementsToRemove.add(accountLink.getId());
logger.debug("Added link with entitlements to removal list: " + accountLink.getApplicationName() + " - " + accountLink.getNativeIdentity());
for (Entitlement entitlement : linkEntitlements) {
logger.debug("Entitlement: " + entitlement.getAttributeName() + "=" + entitlement.getAttributeValue());
}
} else {
logger.debug("No entitlements found for account: " + accountLink.getNativeIdentity() + " - skipping deletion");
}
} catch (Exception e) {
logger.error("Error processing account link: " + accountLink.getNativeIdentity() + ", Error: " + e.getMessage());
}
}
}
Terminator terminator = new Terminator(context);
int linksDeleted = 0;
for (String linkId : linksWithEntitlementsToRemove) {
try {
Link linkToDelete = context.getObjectById(Link.class, linkId);
if (linkToDelete != null) {
logger.debug("Deleting link with entitlements: " + linkToDelete.getApplicationName() + " - " + linkToDelete.getNativeIdentity());
terminator.deleteObject(linkToDelete);
linksDeleted++;
}
} catch (Exception e) {
logger.error("Failed to delete link with ID: " + linkId + ", Error: " + e.getMessage());
}
}
context.commitTransaction();
2025-08-22 15:12:03,410 DEBUG LoggerRules:166 - link entitlements found [sailpoint.object.Entitlement@88617bd8]
2025-08-22 15:12:03,419 DEBUG LoggerRules:166 - link entitlements found [sailpoint.object.Entitlement@e53bc963]
2025-08-22 15:12:03,422 DEBUG LoggerRules:166 - Exception Entitlements found