diff --git a/security/src/main/java/org/genesys/blocks/security/persistence/AclObjectIdentityPersistence.java b/security/src/main/java/org/genesys/blocks/security/persistence/AclObjectIdentityPersistence.java index f3eedfb9933e7e4dec8632abfa5e5048825533d1..9a531911f6b53923301bbb279bada37b72fb520f 100644 --- a/security/src/main/java/org/genesys/blocks/security/persistence/AclObjectIdentityPersistence.java +++ b/security/src/main/java/org/genesys/blocks/security/persistence/AclObjectIdentityPersistence.java @@ -17,6 +17,7 @@ package org.genesys.blocks.security.persistence; import org.genesys.blocks.security.model.AclObjectIdentity; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.querydsl.QueryDslPredicateExecutor; import org.springframework.data.repository.query.Param; @@ -35,4 +36,13 @@ public interface AclObjectIdentityPersistence extends JpaRepository OIDs = aclObjectIdentityPersistence.findAll(); + for (AclObjectIdentity OID : OIDs) { + try { + Class clazz = Class.forName(OID.getAclClass().getAclClass()); + Object entity = entityManager.find(clazz, OID.getObjectIdIdentity()); + if (entity == null) { + LOG.info("{} with OID={} no longer exists, clearing ACL", clazz.getName(), OID.getObjectIdIdentity()); + final List aclEntries = aclEntryPersistence.findByObjectIdentity(OID); + if (aclEntries != null) { + aclEntryPersistence.delete(aclEntries); + } + aclObjectIdentityPersistence.resetChildrenOfOID(OID); + aclObjectIdentityPersistence.delete(OID); + } + } catch (ClassNotFoundException e) { + LOG.info("{} for OID={} no longer exists, clearing ACL", OID.getAclClass().getAclClass(), OID.getObjectIdIdentity()); + final List aclEntries = aclEntryPersistence.findByObjectIdentity(OID); + if (aclEntries != null) { + aclEntryPersistence.delete(aclEntries); + } + aclObjectIdentityPersistence.resetChildrenOfOID(OID); + aclObjectIdentityPersistence.delete(OID); + } + } + + List aclClasses = aclClassPersistence.findAll(); + for (AclClass aclClass : aclClasses) { + try { + Class.forName(aclClass.getAclClass()); + } catch (ClassNotFoundException e) { + LOG.info("{} no longer exists, clearing ACL", aclClass.getAclClass()); + aclClassPersistence.delete(aclClass); + } + } + } + }