From 37d4869e011a1c584868c9cfc98a23e9373b5a88 Mon Sep 17 00:00:00 2001 From: Matija Obreza Date: Sat, 21 Jul 2018 14:32:54 +0200 Subject: [PATCH] Added method to clean up ACL entries --- .../AclObjectIdentityPersistence.java | 10 +++++ .../security/service/CustomAclService.java | 8 +++- .../service/impl/CustomAclServiceImpl.java | 41 +++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) 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 f3eedfb..9a53191 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); + } + } + } + } -- GitLab