This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch 4_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/4_1_X by this push:
     new 12e94dd200 Setting JexlPermissions
12e94dd200 is described below

commit 12e94dd200e30237f9604cf35e61808d5eb5ee94
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Fri Aug 21 18:07:22 2026 +0200

    Setting JexlPermissions
---
 .../client/console/panels/UserDirectoryPanel.java  |  4 +-
 .../client/console/wizards/any/Management.java     | 30 +++----
 .../apache/syncope/common/lib/AnyOperations.java   | 32 ++++----
 .../apache/syncope/common/lib/EntityTOUtils.java   |  8 +-
 .../apache/syncope/common/lib/request/AnyCR.java   | 12 +--
 .../apache/syncope/common/lib/request/AnyUR.java   | 12 +--
 .../apache/syncope/common/lib/request/UserCR.java  |  4 +-
 .../apache/syncope/common/lib/request/UserUR.java  |  4 +-
 .../org/apache/syncope/common/lib/to/AnyTO.java    |  8 +-
 .../syncope/core/persistence/api/entity/Any.java   |  8 +-
 .../core/persistence/api/entity/user/Account.java  |  2 +-
 .../common/validation/AnyValidator.java            |  2 +-
 .../core/persistence/jpa/entity/AbstractAny.java   |  8 +-
 .../core/persistence/jpa/outer/GroupTest.java      |  8 +-
 .../neo4j/dao/repo/AnyObjectRepoExtImpl.java       |  8 +-
 .../neo4j/dao/repo/GroupRepoExtImpl.java           |  8 +-
 .../neo4j/dao/repo/UserRepoExtImpl.java            |  8 +-
 .../core/persistence/neo4j/entity/AbstractAny.java |  8 +-
 .../core/persistence/neo4j/outer/GroupTest.java    |  8 +-
 .../core/provisioning/api/jexl/JexlFunctions.java  |  1 +
 .../core/provisioning/api/jexl/JexlTools.java      | 41 +++++++--
 .../core/provisioning/api/jexl/TemplateUtils.java  | 12 +--
 .../core/provisioning/api/AbstractTest.java        |  3 +-
 .../{JexlUtilsTest.java => JexlToolsTest.java}     |  2 +-
 .../provisioning/java/DefaultMappingManager.java   | 12 +--
 .../provisioning/java/ProvisioningContext.java     |  3 +-
 .../core/provisioning/java/data/AnyDataBinder.java | 50 ++++++-----
 .../java/pushpull/AbstractPullResultHandler.java   | 24 +++---
 .../core/provisioning/java/JexlToolsTest.java      | 96 ++++++++++++++++++++++
 .../DefaultNotificationManagerTest.java            |  3 +-
 .../elasticsearch/client/ElasticsearchUtils.java   |  4 +-
 .../ext/opensearch/client/OpenSearchUtils.java     |  4 +-
 .../org/apache/syncope/fit/core/GroupITCase.java   |  6 +-
 .../org/apache/syncope/fit/core/ManagerITCase.java |  8 +-
 .../apache/syncope/fit/core/PullTaskITCase.java    |  4 +-
 .../apache/syncope/fit/core/UserIssuesITCase.java  | 18 ++--
 36 files changed, 298 insertions(+), 175 deletions(-)

diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
index 3fa73757b2..774f4e5324 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/panels/UserDirectoryPanel.java
@@ -220,7 +220,7 @@ public class UserDirectoryPanel extends 
AnyDirectoryPanel<UserTO, UserRestClient
                             
SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
                             target.add(container);
                         } catch (Exception e) {
-                            LOG.error("While requesting password reject for 
{}", model.getObject().getUManager(), e);
+                            LOG.error("While requesting password reject for 
{}", model.getObject().getuManager(), e);
                             SyncopeConsoleSession.get().onException(e);
                         }
                         ((BasePage) 
pageRef.getPage()).getNotificationPanel().refresh(target);
@@ -241,7 +241,7 @@ public class UserDirectoryPanel extends 
AnyDirectoryPanel<UserTO, UserRestClient
                         
SyncopeConsoleSession.get().success(getString(Constants.OPERATION_SUCCEEDED));
                         target.add(container);
                     } catch (Exception e) {
-                        LOG.error("While dismissing MFA for {}", 
model.getObject().getUManager(), e);
+                        LOG.error("While dismissing MFA for {}", 
model.getObject().getuManager(), e);
                         SyncopeConsoleSession.get().onException(e);
                     }
                     ((BasePage) 
pageRef.getPage()).getNotificationPanel().refresh(target);
diff --git 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Management.java
 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Management.java
index a481486d64..bdbebfd677 100644
--- 
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Management.java
+++ 
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Management.java
@@ -117,7 +117,7 @@ public class Management extends WizardStep implements 
ICondition {
         setTitleModel(new ResourceModel("manager"));
         this.wrapper = anyWrapper;
 
-        isGManager = Model.of(anyWrapper.getInnerObject().getGManager() != 
null);
+        isGManager = Model.of(anyWrapper.getInnerObject().getgManager() != 
null);
 
         BootstrapToggleConfig config = new BootstrapToggleConfig().
                 withOnStyle(BootstrapToggleConfig.Style.info).
@@ -213,11 +213,11 @@ public class Management extends WizardStep implements 
ICondition {
 
             @Override
             public String getObject() {
-                if (anyWrapper.getInnerObject().getUManager() == null) {
+                if (anyWrapper.getInnerObject().getuManager() == null) {
                     return StringUtils.EMPTY;
                 }
 
-                UserTO userTO = 
userRestClient.read(anyWrapper.getInnerObject().getUManager());
+                UserTO userTO = 
userRestClient.read(anyWrapper.getInnerObject().getuManager());
                 if (userTO == null) {
                     return StringUtils.EMPTY;
                 }
@@ -228,11 +228,11 @@ public class Management extends WizardStep implements 
ICondition {
             @Override
             public void setObject(final String object) {
                 if (StringUtils.isBlank(object)) {
-                    anyWrapper.getInnerObject().setUManager(null);
+                    anyWrapper.getInnerObject().setuManager(null);
                 } else {
                     Matcher matcher = manager.matcher(object);
                     if (matcher.matches()) {
-                        
anyWrapper.getInnerObject().setUManager(matcher.group(1));
+                        
anyWrapper.getInnerObject().setuManager(matcher.group(1));
                     }
                 }
             }
@@ -262,10 +262,10 @@ public class Management extends WizardStep implements 
ICondition {
 
             @Override
             public String getObject() {
-                if (anyWrapper.getInnerObject().getGManager() == null) {
+                if (anyWrapper.getInnerObject().getgManager() == null) {
                     return StringUtils.EMPTY;
                 } else {
-                    GroupTO groupTO = 
groupRestClient.read(anyWrapper.getInnerObject().getGManager());
+                    GroupTO groupTO = 
groupRestClient.read(anyWrapper.getInnerObject().getgManager());
                     if (groupTO == null) {
                         return StringUtils.EMPTY;
                     } else {
@@ -277,11 +277,11 @@ public class Management extends WizardStep implements 
ICondition {
             @Override
             public void setObject(final String object) {
                 if (StringUtils.isBlank(object)) {
-                    anyWrapper.getInnerObject().setGManager(null);
+                    anyWrapper.getInnerObject().setgManager(null);
                 } else {
                     final Matcher matcher = manager.matcher(object);
                     if (matcher.matches()) {
-                        
anyWrapper.getInnerObject().setGManager(matcher.group(1));
+                        
anyWrapper.getInnerObject().setgManager(matcher.group(1));
                     }
                 }
             }
@@ -322,14 +322,14 @@ public class Management extends WizardStep implements 
ICondition {
         } else if (event.getPayload() instanceof final 
AnySelectionDirectoryPanel.ItemSelection<?> itemSelection) {
             AnyTO sel = itemSelection.getSelection();
             if (sel == null) {
-                wrapper.getInnerObject().setUManager(null);
-                wrapper.getInnerObject().setGManager(null);
+                wrapper.getInnerObject().setuManager(null);
+                wrapper.getInnerObject().setgManager(null);
             } else if (sel instanceof UserTO) {
-                wrapper.getInnerObject().setUManager(sel.getKey());
-                wrapper.getInnerObject().setGManager(null);
+                wrapper.getInnerObject().setuManager(sel.getKey());
+                wrapper.getInnerObject().setgManager(null);
             } else if (sel instanceof GroupTO) {
-                wrapper.getInnerObject().setUManager(null);
-                wrapper.getInnerObject().setGManager(sel.getKey());
+                wrapper.getInnerObject().setuManager(null);
+                wrapper.getInnerObject().setgManager(sel.getKey());
             }
             itemSelection.getTarget().add(managerContainer);
         } else {
diff --git 
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
 
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
index 7b086202fb..d371d12ff8 100644
--- 
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
+++ 
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
@@ -123,29 +123,29 @@ public final class AnyOperations {
         result.setRealm(replacePatchItem(updated.getRealm(), 
original.getRealm(), new StringReplacePatchItem()));
 
         // 2. manager
-        if (updated.getUManager() != null || original.getUManager() != null) {
+        if (updated.getuManager() != null || original.getuManager() != null) {
             StringReplacePatchItem uManager = new StringReplacePatchItem();
-            if (updated.getUManager() == null) {
+            if (updated.getuManager() == null) {
                 if (!incremental) {
                     uManager.setOperation(PatchOperation.DELETE);
-                    result.setUManager(uManager);
+                    result.setuManager(uManager);
                 }
-            } else if (!updated.getUManager().equals(original.getUManager())) {
-                uManager.setValue(updated.getUManager());
-                result.setUManager(uManager);
+            } else if (!updated.getuManager().equals(original.getuManager())) {
+                uManager.setValue(updated.getuManager());
+                result.setuManager(uManager);
             }
         }
 
-        if (updated.getGManager() != null || original.getGManager() != null) {
+        if (updated.getgManager() != null || original.getgManager() != null) {
             StringReplacePatchItem gManager = new StringReplacePatchItem();
-            if (updated.getGManager() == null) {
+            if (updated.getgManager() == null) {
                 if (!incremental) {
                     gManager.setOperation(PatchOperation.DELETE);
-                    result.setGManager(gManager);
+                    result.setgManager(gManager);
                 }
-            } else if (!updated.getGManager().equals(original.getGManager())) {
-                gManager.setValue(updated.getGManager());
-                result.setGManager(gManager);
+            } else if (!updated.getgManager().equals(original.getgManager())) {
+                gManager.setValue(updated.getgManager());
+                result.setgManager(gManager);
             }
         }
 
@@ -406,11 +406,11 @@ public final class AnyOperations {
         }
 
         // 1. manager
-        if (req.getUManager() != null) {
-            result.setUManager(req.getUManager().getValue());
+        if (req.getuManager() != null) {
+            result.setuManager(req.getuManager().getValue());
         }
-        if (req.getGManager() != null) {
-            result.setGManager(req.getGManager().getValue());
+        if (req.getgManager() != null) {
+            result.setgManager(req.getgManager().getValue());
         }
 
         // 2. auxiliary classes
diff --git 
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java
 
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java
index cb41968f09..b810721a2c 100644
--- 
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java
+++ 
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/EntityTOUtils.java
@@ -65,8 +65,8 @@ public final class EntityTOUtils {
 
     public static <A extends AnyTO, C extends AnyCR> void toAnyCR(final A 
anyTO, final C anyCR) {
         anyCR.setRealm(anyTO.getRealm());
-        anyCR.setUManager(anyTO.getUManager());
-        anyCR.setGManager(anyTO.getGManager());
+        anyCR.setuManager(anyTO.getuManager());
+        anyCR.setgManager(anyTO.getgManager());
         anyCR.getAuxClasses().addAll(anyTO.getAuxClasses());
         anyCR.getPlainAttrs().addAll(anyTO.getPlainAttrs());
         anyCR.getResources().addAll(anyTO.getResources());
@@ -91,8 +91,8 @@ public final class EntityTOUtils {
 
     public static <C extends AnyCR, A extends AnyTO> void toAnyTO(final C 
anyCR, final A anyTO) {
         anyTO.setRealm(anyCR.getRealm());
-        anyTO.setUManager(anyCR.getUManager());
-        anyTO.setGManager(anyCR.getGManager());
+        anyTO.setuManager(anyCR.getuManager());
+        anyTO.setgManager(anyCR.getgManager());
         anyTO.getAuxClasses().addAll(anyCR.getAuxClasses());
         anyTO.getPlainAttrs().addAll(anyCR.getPlainAttrs());
         anyTO.getResources().addAll(anyCR.getResources());
diff --git 
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyCR.java
 
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyCR.java
index d7c0e77dee..a21bab0a96 100644
--- 
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyCR.java
+++ 
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyCR.java
@@ -63,13 +63,13 @@ public abstract class AnyCR implements BaseBean, 
RealmMember, RelatableTO {
 
         @SuppressWarnings("unchecked")
         public B uManager(final String uManager) {
-            getInstance().setUManager(uManager);
+            getInstance().setuManager(uManager);
             return (B) this;
         }
 
         @SuppressWarnings("unchecked")
         public B gManager(final String gManager) {
-            getInstance().setGManager(gManager);
+            getInstance().setgManager(gManager);
             return (B) this;
         }
 
@@ -185,19 +185,19 @@ public abstract class AnyCR implements BaseBean, 
RealmMember, RelatableTO {
         this.realm = realm;
     }
 
-    public String getUManager() {
+    public String getuManager() {
         return uManager;
     }
 
-    public void setUManager(final String uManager) {
+    public void setuManager(final String uManager) {
         this.uManager = uManager;
     }
 
-    public String getGManager() {
+    public String getgManager() {
         return gManager;
     }
 
-    public void setGManager(final String gManager) {
+    public void setgManager(final String gManager) {
         this.gManager = gManager;
     }
 
diff --git 
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyUR.java
 
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyUR.java
index a3c18fb0fb..7b29a19578 100644
--- 
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyUR.java
+++ 
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/AnyUR.java
@@ -64,13 +64,13 @@ public abstract class AnyUR implements BaseBean {
 
         @SuppressWarnings("unchecked")
         public B uManager(final StringReplacePatchItem uManager) {
-            getInstance().setUManager(uManager);
+            getInstance().setuManager(uManager);
             return (B) this;
         }
 
         @SuppressWarnings("unchecked")
         public B gManager(final StringReplacePatchItem gManager) {
-            getInstance().setGManager(gManager);
+            getInstance().setgManager(gManager);
             return (B) this;
         }
 
@@ -195,19 +195,19 @@ public abstract class AnyUR implements BaseBean {
         this.realm = realm;
     }
 
-    public StringReplacePatchItem getUManager() {
+    public StringReplacePatchItem getuManager() {
         return uManager;
     }
 
-    public void setUManager(final StringReplacePatchItem uManager) {
+    public void setuManager(final StringReplacePatchItem uManager) {
         this.uManager = uManager;
     }
 
-    public StringReplacePatchItem getGManager() {
+    public StringReplacePatchItem getgManager() {
         return gManager;
     }
 
-    public void setGManager(final StringReplacePatchItem gManager) {
+    public void setgManager(final StringReplacePatchItem gManager) {
         this.gManager = gManager;
     }
 
diff --git 
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserCR.java
 
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserCR.java
index 0fe8dae439..fefca338a7 100644
--- 
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserCR.java
+++ 
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserCR.java
@@ -219,8 +219,8 @@ public class UserCR extends AnyCR implements 
GroupableRelatableTO {
 
     @JsonIgnore
     public boolean requiresApproval() {
-        return getUManager() != null
-                || getGManager() != null
+        return getuManager() != null
+                || getgManager() != null
                 || !getResources().isEmpty()
                 || !getRelationships().isEmpty()
                 || !memberships.isEmpty()
diff --git 
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserUR.java
 
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserUR.java
index 7e33b9dad3..71bab24a8e 100644
--- 
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserUR.java
+++ 
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/UserUR.java
@@ -197,8 +197,8 @@ public class UserUR extends AnyUR {
 
     @JsonIgnore
     public boolean requiresApproval() {
-        return getUManager() != null
-                || getGManager() != null
+        return getuManager() != null
+                || getgManager() != null
                 || !getResources().isEmpty()
                 || !getRelationships().isEmpty()
                 || !memberships.isEmpty()
diff --git 
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java 
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java
index b92d5d522c..8d8853b3c5 100644
--- 
a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java
+++ 
b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java
@@ -183,19 +183,19 @@ public abstract class AnyTO implements EntityTO, 
RealmMember, RelatableTO {
         this.realm = realm;
     }
 
-    public String getUManager() {
+    public String getuManager() {
         return uManager;
     }
 
-    public void setUManager(final String uManager) {
+    public void setuManager(final String uManager) {
         this.uManager = uManager;
     }
 
-    public String getGManager() {
+    public String getgManager() {
         return gManager;
     }
 
-    public void setGManager(final String gManager) {
+    public void setgManager(final String gManager) {
         this.gManager = gManager;
     }
 
diff --git 
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Any.java
 
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Any.java
index 3e6e8c4150..a6e6fa828b 100644
--- 
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Any.java
+++ 
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Any.java
@@ -57,13 +57,13 @@ public interface Any extends Attributable, Entity {
 
     void setRealm(Realm realm);
 
-    User getUManager();
+    User getuManager();
 
-    void setUManager(User manager);
+    void setuManager(User manager);
 
-    Group getGManager();
+    Group getgManager();
 
-    void setGManager(Group manager);
+    void setgManager(Group manager);
 
     String getStatus();
 
diff --git 
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/Account.java
 
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/Account.java
index dc34148856..f6b2fc93b3 100644
--- 
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/Account.java
+++ 
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/user/Account.java
@@ -37,7 +37,7 @@ public interface Account {
     void setPassword(String password);
 
     void setCipherAlgorithm(CipherAlgorithm cipherAlgorithm);
-    
+
     Boolean isSuspended();
 
     void setSuspended(Boolean suspended);
diff --git 
a/core/persistence-common/src/main/java/org/apache/syncope/core/persistence/common/validation/AnyValidator.java
 
b/core/persistence-common/src/main/java/org/apache/syncope/core/persistence/common/validation/AnyValidator.java
index 9471252245..98ef1d92f5 100644
--- 
a/core/persistence-common/src/main/java/org/apache/syncope/core/persistence/common/validation/AnyValidator.java
+++ 
b/core/persistence-common/src/main/java/org/apache/syncope/core/persistence/common/validation/AnyValidator.java
@@ -38,7 +38,7 @@ public class AnyValidator extends AbstractValidator<AnyCheck, 
Any> {
     public boolean isValid(final Any any, final ConstraintValidatorContext 
context) {
         context.disableDefaultConstraintViolation();
 
-        if (any.getUManager() != null && any.getGManager() != null) {
+        if (any.getuManager() != null && any.getgManager() != null) {
             context.buildConstraintViolationWithTemplate(
                     getTemplate(EntityViolationType.InvalidManager,
                             "Must either be managed by an user or by a group, 
not both")).
diff --git 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractAny.java
 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractAny.java
index 76eb8507fe..1659412a59 100644
--- 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractAny.java
+++ 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/AbstractAny.java
@@ -154,23 +154,23 @@ public abstract class AbstractAny extends 
AbstractAttributable implements Any {
     }
 
     @Override
-    public User getUManager() {
+    public User getuManager() {
         return uManager;
     }
 
     @Override
-    public void setUManager(final User manager) {
+    public void setuManager(final User manager) {
         checkType(manager, JPAUser.class);
         this.uManager = (JPAUser) manager;
     }
 
     @Override
-    public Group getGManager() {
+    public Group getgManager() {
         return gManager;
     }
 
     @Override
-    public void setGManager(final Group manager) {
+    public void setgManager(final Group manager) {
         checkType(manager, JPAGroup.class);
         this.gManager = (JPAGroup) manager;
     }
diff --git 
a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
 
b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
index f78b9dce06..6a5f487700 100644
--- 
a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
+++ 
b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/GroupTest.java
@@ -136,8 +136,8 @@ public class GroupTest extends AbstractTest {
             Group group = entityFactory.newEntity(Group.class);
             group.setRealm(realmDAO.getRoot());
             group.setName("error");
-            group.setUManager(user);
-            group.setGManager(root);
+            group.setuManager(user);
+            group.setgManager(root);
 
             groupDAO.save(group);
         });
@@ -149,7 +149,7 @@ public class GroupTest extends AbstractTest {
 
         User user = 
userDAO.findById("823074dc-d280-436d-a7dd-07399fae48ec").orElseThrow();
 
-        assertEquals(user, group.getUManager());
+        assertEquals(user, group.getuManager());
 
         List<Group> managed = userDAO.findManagedGroups(user.getKey());
         assertFalse(managed.isEmpty());
@@ -163,7 +163,7 @@ public class GroupTest extends AbstractTest {
         Group group = entityFactory.newEntity(Group.class);
         group.setRealm(realmDAO.getRoot());
         group.setName("error");
-        group.setGManager(root);
+        group.setgManager(root);
         group = groupDAO.save(group);
         entityManager.flush();
 
diff --git 
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/AnyObjectRepoExtImpl.java
 
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/AnyObjectRepoExtImpl.java
index a9c76e6568..cd8b0f70f6 100644
--- 
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/AnyObjectRepoExtImpl.java
+++ 
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/AnyObjectRepoExtImpl.java
@@ -245,20 +245,20 @@ public class AnyObjectRepoExtImpl extends 
AbstractAnyRepoExt<AnyObject, Neo4jAny
                     anyObject.getKey(),
                     auxClass.getKey(),
                     Neo4jAnyObject.ANY_OBJECT_AUX_CLASSES_REL));
-            if (before.getUManager() != null && anyObject.getUManager() == 
null) {
+            if (before.getuManager() != null && anyObject.getuManager() == 
null) {
                 deleteRelationship(
                         Neo4jAnyObject.NODE,
                         Neo4jUser.NODE,
                         anyObject.getKey(),
-                        before.getUManager().getKey(),
+                        before.getuManager().getKey(),
                         Neo4jGroup.USER_MANAGER_REL);
             }
-            if (before.getGManager() != null && anyObject.getGManager() == 
null) {
+            if (before.getgManager() != null && anyObject.getgManager() == 
null) {
                 deleteRelationship(
                         Neo4jAnyObject.NODE,
                         Neo4jGroup.NODE,
                         anyObject.getKey(),
-                        before.getGManager().getKey(),
+                        before.getgManager().getKey(),
                         Neo4jGroup.GROUP_MANAGER_REL);
             }
 
diff --git 
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepoExtImpl.java
 
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepoExtImpl.java
index 1af911e9c2..f42f1573d0 100644
--- 
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepoExtImpl.java
+++ 
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepoExtImpl.java
@@ -274,20 +274,20 @@ public class GroupRepoExtImpl extends 
AbstractAnyRepoExt<Group, Neo4jGroup> impl
                     group.getKey(),
                     auxClass.getKey(),
                     Neo4jGroup.GROUP_AUX_CLASSES_REL));
-            if (before.getUManager() != null && group.getUManager() == null) {
+            if (before.getuManager() != null && group.getuManager() == null) {
                 deleteRelationship(
                         Neo4jGroup.NODE,
                         Neo4jUser.NODE,
                         group.getKey(),
-                        before.getUManager().getKey(),
+                        before.getuManager().getKey(),
                         AbstractAny.USER_MANAGER_REL);
             }
-            if (before.getGManager() != null && group.getGManager() == null) {
+            if (before.getgManager() != null && group.getgManager() == null) {
                 deleteRelationship(
                         Neo4jGroup.NODE,
                         Neo4jGroup.NODE,
                         group.getKey(),
-                        before.getGManager().getKey(),
+                        before.getgManager().getKey(),
                         AbstractAny.GROUP_MANAGER_REL);
             }
 
diff --git 
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/UserRepoExtImpl.java
 
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/UserRepoExtImpl.java
index 12874546eb..a2a1e41dd5 100644
--- 
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/UserRepoExtImpl.java
+++ 
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/UserRepoExtImpl.java
@@ -340,20 +340,20 @@ public class UserRepoExtImpl extends 
AbstractAnyRepoExt<User, Neo4jUser> impleme
                     user.getKey(),
                     auxClass.getKey(),
                     Neo4jUser.USER_AUX_CLASSES_REL));
-            if (before.getUManager() != null && user.getUManager() == null) {
+            if (before.getuManager() != null && user.getuManager() == null) {
                 deleteRelationship(
                         Neo4jUser.NODE,
                         Neo4jUser.NODE,
                         user.getKey(),
-                        before.getUManager().getKey(),
+                        before.getuManager().getKey(),
                         AbstractAny.USER_MANAGER_REL);
             }
-            if (before.getGManager() != null && user.getGManager() == null) {
+            if (before.getgManager() != null && user.getgManager() == null) {
                 deleteRelationship(
                         Neo4jUser.NODE,
                         Neo4jGroup.NODE,
                         user.getKey(),
-                        before.getGManager().getKey(),
+                        before.getgManager().getKey(),
                         AbstractAny.GROUP_MANAGER_REL);
             }
             if (before.getSecurityQuestion() != null && 
user.getSecurityQuestion() == null) {
diff --git 
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/AbstractAny.java
 
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/AbstractAny.java
index 0e7060b356..9daeff6a8a 100644
--- 
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/AbstractAny.java
+++ 
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/entity/AbstractAny.java
@@ -155,23 +155,23 @@ public abstract class AbstractAny extends 
AbstractAttributable implements Any {
     }
 
     @Override
-    public User getUManager() {
+    public User getuManager() {
         return uManager;
     }
 
     @Override
-    public void setUManager(final User uManager) {
+    public void setuManager(final User uManager) {
         checkType(uManager, Neo4jUser.class);
         this.uManager = (Neo4jUser) uManager;
     }
 
     @Override
-    public Group getGManager() {
+    public Group getgManager() {
         return gManager;
     }
 
     @Override
-    public void setGManager(final Group gManager) {
+    public void setgManager(final Group gManager) {
         checkType(gManager, Neo4jGroup.class);
         this.gManager = (Neo4jGroup) gManager;
     }
diff --git 
a/core/persistence-neo4j/src/test/java/org/apache/syncope/core/persistence/neo4j/outer/GroupTest.java
 
b/core/persistence-neo4j/src/test/java/org/apache/syncope/core/persistence/neo4j/outer/GroupTest.java
index 553077cad3..7510fd30a9 100644
--- 
a/core/persistence-neo4j/src/test/java/org/apache/syncope/core/persistence/neo4j/outer/GroupTest.java
+++ 
b/core/persistence-neo4j/src/test/java/org/apache/syncope/core/persistence/neo4j/outer/GroupTest.java
@@ -134,8 +134,8 @@ public class GroupTest extends AbstractTest {
             Group group = entityFactory.newEntity(Group.class);
             group.setRealm(realmDAO.getRoot());
             group.setName("error");
-            group.setUManager(user);
-            group.setGManager(root);
+            group.setuManager(user);
+            group.setgManager(root);
 
             groupDAO.save(group);
         });
@@ -147,7 +147,7 @@ public class GroupTest extends AbstractTest {
 
         User user = 
userDAO.findById("823074dc-d280-436d-a7dd-07399fae48ec").orElseThrow();
 
-        assertEquals(user, group.getUManager());
+        assertEquals(user, group.getuManager());
 
         List<Group> managed = userDAO.findManagedGroups(user.getKey());
         assertFalse(managed.isEmpty());
@@ -161,7 +161,7 @@ public class GroupTest extends AbstractTest {
         Group group = entityFactory.newEntity(Group.class);
         group.setRealm(realmDAO.getRoot());
         group.setName("error");
-        group.setGManager(root);
+        group.setgManager(root);
         group = groupDAO.save(group);
 
         List<Group> managed = groupDAO.findManagedGroups(root.getKey());
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlFunctions.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlFunctions.java
index 56fd253091..72d18e859c 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlFunctions.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlFunctions.java
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.core.provisioning.api.jexl;
 
+@FunctionalInterface
 public interface JexlFunctions {
 
     String getNamespace();
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlTools.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlTools.java
index e34df5b5ba..333e886240 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlTools.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/JexlTools.java
@@ -25,6 +25,7 @@ import org.apache.commons.jexl3.JexlEngine;
 import org.apache.commons.jexl3.JexlException;
 import org.apache.commons.jexl3.JexlExpression;
 import org.apache.commons.jexl3.JxltEngine;
+import org.apache.commons.jexl3.introspection.JexlPermissions;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.core.persistence.api.entity.Attributable;
 import org.apache.syncope.core.provisioning.api.DerAttrHandler;
@@ -39,6 +40,41 @@ public class JexlTools {
 
     protected static final Logger LOG = 
LoggerFactory.getLogger(JexlTools.class);
 
+    public static final JexlPermissions DEFAULT_PERMISSIONS = 
JexlPermissions.RESTRICTED.compose(
+            "java.time.*",
+            "org.apache.syncope.* ",
+            "org.apache.syncope.core.persistence.jpa.entity.user { -JPAUser { "
+            + "getCipherAlgorithm(); "
+            + "getPassword(); "
+            + "getPasswordHistory(); "
+            + "getSecurityAnswer(); "
+            + "getMfa(); "
+            + "getToken(); "
+            + "getTokenExpireTime(); "
+            + "} }",
+            "org.apache.syncope.core.persistence.jpa.entity.user { 
-JPALinkedAccount { "
+            + "getPassword(); "
+            + "} }",
+            "org.apache.syncope.core.persistence.neo4j.entity.user { 
-Neo4jUser { "
+            + "getCipherAlgorithm(); "
+            + "getPassword(); "
+            + "getPasswordHistory(); "
+            + "getSecurityAnswer(); "
+            + "getMfa(); "
+            + "getToken(); "
+            + "getTokenExpireTime(); "
+            + "} }",
+            "org.apache.syncope.core.persistence.neo4j.entity.user { 
-Neo4jLinkedAccount { "
+            + "getPassword(); "
+            + "} }",
+            "org.apache.syncope.common.lib.to { -UserTO { "
+            + "getPassword(); "
+            + "} }",
+            "org.apache.syncope.common.lib.to { -LinkedAccountTO { "
+            + "getPassword(); "
+            + "} }"
+    );
+
     protected final JexlEngine jexlEngine;
 
     protected final JxltEngine jxltEngine;
@@ -48,11 +84,6 @@ public class JexlTools {
         this.jxltEngine = jexlEngine.createJxltEngine(false);
     }
 
-    public JexlTools(final JexlEngine jexlEngine, final JxltEngine jxltEngine) 
{
-        this.jexlEngine = jexlEngine;
-        this.jxltEngine = jxltEngine;
-    }
-
     public boolean isExpressionValid(final String expression) {
         boolean result;
         try {
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/TemplateUtils.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/TemplateUtils.java
index 42d9dcdf89..a17f5a310f 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/TemplateUtils.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/TemplateUtils.java
@@ -161,22 +161,22 @@ public class TemplateUtils {
 
         fill(realmMember, template, jexlContext);
 
-        
Optional.ofNullable(template.getUManager()).flatMap(userDAO::findById).ifPresent(uManager
 -> {
+        
Optional.ofNullable(template.getuManager()).flatMap(userDAO::findById).ifPresent(uManager
 -> {
             switch (realmMember) {
                 case AnyTO arm ->
-                    arm.setUManager(uManager.getKey());
+                    arm.setuManager(uManager.getKey());
                 case AnyCR arm ->
-                    arm.setGManager(uManager.getKey());
+                    arm.setgManager(uManager.getKey());
                 default -> {
                 }
             }
         });
-        
Optional.ofNullable(template.getGManager()).flatMap(groupDAO::findById).ifPresent(gManager
 -> {
+        
Optional.ofNullable(template.getgManager()).flatMap(groupDAO::findById).ifPresent(gManager
 -> {
             switch (realmMember) {
                 case AnyTO arm ->
-                    arm.setUManager(gManager.getKey());
+                    arm.setuManager(gManager.getKey());
                 case AnyCR arm ->
-                    arm.setGManager(gManager.getKey());
+                    arm.setgManager(gManager.getKey());
                 default -> {
                 }
             }
diff --git 
a/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/AbstractTest.java
 
b/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/AbstractTest.java
index f923b6d3f0..f246b7c583 100644
--- 
a/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/AbstractTest.java
+++ 
b/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/AbstractTest.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.provisioning.api;
 import java.util.Map;
 import org.apache.commons.jexl3.JexlBuilder;
 import org.apache.commons.jexl3.JexlEngine;
-import org.apache.commons.jexl3.introspection.JexlPermissions;
 import org.apache.syncope.core.provisioning.api.jexl.EmptyClassLoader;
 import org.apache.syncope.core.provisioning.api.jexl.JexlTools;
 import org.apache.syncope.core.provisioning.api.jexl.SyncopeJexlFunctions;
@@ -40,7 +39,7 @@ public class AbstractTest {
     protected JexlTools jexlTools() {
         JexlEngine jexlEngine = new JexlBuilder().
                 loader(new EmptyClassLoader()).
-                permissions(JexlPermissions.RESTRICTED.compose("java.time.*", 
"org.apache.syncope.*")).
+                permissions(JexlTools.DEFAULT_PERMISSIONS).
                 namespaces(Map.of("syncope", new SyncopeJexlFunctions())).
                 cache(512).
                 silent(false).
diff --git 
a/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/jexl/JexlUtilsTest.java
 
b/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/jexl/JexlToolsTest.java
similarity index 99%
rename from 
core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/jexl/JexlUtilsTest.java
rename to 
core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/jexl/JexlToolsTest.java
index 39cae5985f..f4bcbed020 100644
--- 
a/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/jexl/JexlUtilsTest.java
+++ 
b/core/provisioning-api/src/test/java/org/apache/syncope/core/provisioning/api/jexl/JexlToolsTest.java
@@ -49,7 +49,7 @@ import org.junit.jupiter.api.Test;
 import org.mockito.Mock;
 import org.springframework.test.util.ReflectionTestUtils;
 
-public class JexlUtilsTest extends AbstractTest {
+class JexlToolsTest extends AbstractTest {
 
     @Mock
     private JexlContext context;
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java
index 7986348794..103b660d75 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultMappingManager.java
@@ -760,11 +760,11 @@ public class DefaultMappingManager implements 
MappingManager {
                                 : null;
 
                         String managerValue = null;
-                        if (ref.getUManager() != null && uMappingTO != null) {
-                            managerValue = getManagerValue(resource, 
provision, ref.getUManager());
+                        if (ref.getuManager() != null && uMappingTO != null) {
+                            managerValue = getManagerValue(resource, 
provision, ref.getuManager());
                         }
-                        if (ref.getGManager() != null && gMappingTO != null) {
-                            managerValue = getManagerValue(resource, 
provision, ref.getGManager());
+                        if (ref.getgManager() != null && gMappingTO != null) {
+                            managerValue = getManagerValue(resource, 
provision, ref.getgManager());
                         }
 
                         if (StringUtils.isNotBlank(managerValue)) {
@@ -1090,11 +1090,11 @@ public class DefaultMappingManager implements 
MappingManager {
                 }
 
                 case "uManager" -> {
-                    anyTO.setUManager(values.getFirst().toString());
+                    anyTO.setuManager(values.getFirst().toString());
                 }
 
                 case "gManager" -> {
-                    anyTO.setGManager(values.getFirst().toString());
+                    anyTO.setgManager(values.getFirst().toString());
                 }
 
                 default -> {
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ProvisioningContext.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ProvisioningContext.java
index 6f654dc635..71c4442684 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ProvisioningContext.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ProvisioningContext.java
@@ -24,7 +24,6 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 import org.apache.commons.jexl3.JexlBuilder;
 import org.apache.commons.jexl3.JexlEngine;
-import org.apache.commons.jexl3.introspection.JexlPermissions;
 import org.apache.syncope.common.keymaster.client.api.ConfParamOps;
 import org.apache.syncope.core.persistence.api.DomainHolder;
 import org.apache.syncope.core.persistence.api.EncryptorManager;
@@ -200,7 +199,7 @@ public class ProvisioningContext {
     public JexlTools jexlTools(final List<JexlFunctions> jexlFunctions) {
         JexlEngine jexlEngine = new JexlBuilder().
                 loader(new EmptyClassLoader()).
-                permissions(JexlPermissions.RESTRICTED.compose("java.time.*", 
"org.apache.syncope.*")).
+                permissions(JexlTools.DEFAULT_PERMISSIONS).
                 namespaces(jexlFunctions.stream().
                         collect(Collectors.toMap(JexlFunctions::getNamespace, 
Function.identity()))).
                 cache(512).
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyDataBinder.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyDataBinder.java
index 75d2c9c8d3..52cebf434d 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyDataBinder.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyDataBinder.java
@@ -102,8 +102,8 @@ abstract class AnyDataBinder extends AttributableDataBinder 
{
 
         anyTO.setRealm(any.getRealm().getFullPath());
 
-        
Optional.ofNullable(any.getUManager()).map(User::getKey).ifPresent(anyTO::setUManager);
-        
Optional.ofNullable(any.getGManager()).map(Group::getKey).ifPresent(anyTO::setGManager);
+        
Optional.ofNullable(any.getuManager()).map(User::getKey).ifPresent(anyTO::setuManager);
+        
Optional.ofNullable(any.getgManager()).map(Group::getKey).ifPresent(anyTO::setgManager);
 
         
anyTO.getAuxClasses().addAll(any.getAuxClasses().stream().map(AnyTypeClass::getKey).toList());
 
@@ -420,38 +420,38 @@ abstract class AnyDataBinder extends 
AttributableDataBinder {
 
         // 0. manager
         PropagationByResource<String> managerPropByRes = new 
PropagationByResource<>();
-        if (anyUR.getUManager() != null) {
-            if (anyUR.getUManager().getValue() == null) {
-                if (any.getUManager() != null) {
-                    any.setUManager(null);
+        if (anyUR.getuManager() != null) {
+            if (anyUR.getuManager().getValue() == null) {
+                if (any.getuManager() != null) {
+                    any.setuManager(null);
                     managerPropByRes.addAll(ResourceOperation.UPDATE, 
anyUtils.dao().findAllResourceKeys(any.getKey()));
                 }
             } else {
-                User manager = 
userDAO.findById(anyUR.getUManager().getValue()).orElse(null);
+                User manager = 
userDAO.findById(anyUR.getuManager().getValue()).orElse(null);
                 if (manager == null) {
                     LOG.debug("Unable to find user manager for {} {} by key 
{}",
-                            any.getKey(), anyUtils.anyTypeKind(), 
anyUR.getUManager().getValue());
-                    any.setUManager(null);
+                            any.getKey(), anyUtils.anyTypeKind(), 
anyUR.getuManager().getValue());
+                    any.setuManager(null);
                 } else {
-                    any.setUManager(manager);
+                    any.setuManager(manager);
                     managerPropByRes.addAll(ResourceOperation.UPDATE, 
anyUtils.dao().findAllResourceKeys(any.getKey()));
                 }
             }
         }
-        if (anyUR.getGManager() != null) {
-            if (anyUR.getGManager().getValue() == null) {
-                if (any.getGManager() != null) {
-                    any.setGManager(null);
+        if (anyUR.getgManager() != null) {
+            if (anyUR.getgManager().getValue() == null) {
+                if (any.getgManager() != null) {
+                    any.setgManager(null);
                     managerPropByRes.addAll(ResourceOperation.UPDATE, 
anyUtils.dao().findAllResourceKeys(any.getKey()));
                 }
             } else {
-                Group manager = 
groupDAO.findById(anyUR.getGManager().getValue()).orElse(null);
+                Group manager = 
groupDAO.findById(anyUR.getgManager().getValue()).orElse(null);
                 if (manager == null) {
                     LOG.debug("Unable to find group manager for {} {} by key 
{}",
-                            any.getKey(), anyUtils.anyTypeKind(), 
anyUR.getGManager().getValue());
-                    any.setGManager(null);
+                            any.getKey(), anyUtils.anyTypeKind(), 
anyUR.getgManager().getValue());
+                    any.setgManager(null);
                 } else {
-                    any.setGManager(manager);
+                    any.setgManager(manager);
                     managerPropByRes.addAll(ResourceOperation.UPDATE, 
anyUtils.dao().findAllResourceKeys(any.getKey()));
                 }
             }
@@ -643,15 +643,13 @@ abstract class AnyDataBinder extends 
AttributableDataBinder {
 
         // 0. manager
         // owner
-        if (anyCR.getUManager() != null) {
-            userDAO.findById(anyCR.getUManager()).ifPresentOrElse(
-                    any::setUManager,
-                    () -> LOG.warn("Ignoring invalid user specified as 
manager: {}", anyCR.getUManager()));
+        if (anyCR.getuManager() != null) {
+            
userDAO.findById(anyCR.getuManager()).ifPresentOrElse(any::setuManager,
+                    () -> LOG.warn("Ignoring invalid user specified as 
manager: {}", anyCR.getuManager()));
         }
-        if (anyCR.getGManager() != null) {
-            groupDAO.findById(anyCR.getGManager()).ifPresentOrElse(
-                    any::setGManager,
-                    () -> LOG.warn("Ignoring invalid group specified as 
manager: {}", anyCR.getGManager()));
+        if (anyCR.getgManager() != null) {
+            
groupDAO.findById(anyCR.getgManager()).ifPresentOrElse(any::setgManager,
+                    () -> LOG.warn("Ignoring invalid group specified as 
manager: {}", anyCR.getgManager()));
         }
 
         // 1. aux classes
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
index 47fb8d6fa3..4a3a088a66 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
@@ -236,10 +236,10 @@ public abstract class AbstractPullResultHandler
             }
             result.setName(getName(req));
 
-            Optional<String> uManager = Optional.ofNullable(req.getUManager());
-            req.setUManager(null);
-            Optional<String> gManager = Optional.ofNullable(req.getGManager());
-            req.setGManager(null);
+            Optional<String> uManager = Optional.ofNullable(req.getuManager());
+            req.setuManager(null);
+            Optional<String> gManager = Optional.ofNullable(req.getgManager());
+            req.setgManager(null);
 
             AnyTO created = doCreate(req, delta);
             output = created;
@@ -353,14 +353,14 @@ public abstract class AbstractPullResultHandler
                     action.beforeUpdate(profile, delta, before, req);
                 }
 
-                Optional.ofNullable(req.getUManager()).ifPresent(patch -> 
uManagers.put(
+                Optional.ofNullable(req.getuManager()).ifPresent(patch -> 
uManagers.put(
                         before.getKey(),
                         Optional.ofNullable(patch.getValue())));
-                req.setUManager(null);
-                Optional.ofNullable(req.getGManager()).ifPresent(patch -> 
gManagers.put(
+                req.setuManager(null);
+                Optional.ofNullable(req.getgManager()).ifPresent(patch -> 
gManagers.put(
                         before.getKey(),
                         Optional.ofNullable(patch.getValue())));
-                req.setGManager(null);
+                req.setgManager(null);
 
                 req = doUpdate(before, req, delta, result);
                 AnyTO updated = AnyOperations.patch(before, req);
@@ -1002,8 +1002,8 @@ public abstract class AbstractPullResultHandler
                             manager,
                             profile.getTask().getResource(),
                             profile.getConnector()).
-                            ifPresent(match -> any.setUManager((User) 
match.getAny())),
-                    () -> any.setUManager(null));
+                            ifPresent(match -> any.setuManager((User) 
match.getAny())),
+                    () -> any.setuManager(null));
 
             anyUtils().dao().save(any);
         });
@@ -1017,8 +1017,8 @@ public abstract class AbstractPullResultHandler
                             manager,
                             profile.getTask().getResource(),
                             profile.getConnector()).
-                            ifPresent(match -> any.setGManager((Group) 
match.getAny())),
-                    () -> any.setGManager(null));
+                            ifPresent(match -> any.setgManager((Group) 
match.getAny())),
+                    () -> any.setgManager(null));
 
             anyUtils().dao().save(any);
         });
diff --git 
a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/JexlToolsTest.java
 
b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/JexlToolsTest.java
new file mode 100644
index 0000000000..63bc485498
--- /dev/null
+++ 
b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/JexlToolsTest.java
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.core.provisioning.java;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import java.util.Map;
+import org.apache.commons.jexl3.JexlContext;
+import org.apache.commons.jexl3.MapContext;
+import org.apache.syncope.common.lib.to.MembershipTO;
+import org.apache.syncope.common.lib.to.UserTO;
+import org.apache.syncope.core.persistence.api.entity.EntityFactory;
+import org.apache.syncope.core.persistence.api.entity.group.Group;
+import org.apache.syncope.core.persistence.api.entity.user.UMembership;
+import org.apache.syncope.core.persistence.api.entity.user.User;
+import org.apache.syncope.core.provisioning.api.jexl.JexlContextBuilder;
+import org.apache.syncope.core.provisioning.api.jexl.JexlTools;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+class JexlToolsTest extends AbstractTest {
+
+    @Autowired
+    private EntityFactory entityFactory;
+
+    @Autowired
+    private JexlTools jexlTools;
+
+    @Test
+    void permissionFields() {
+        UserTO userTO = new UserTO();
+        userTO.setUsername("username1");
+        userTO.setPassword("userPassword1");
+
+        JexlContext ctx = new JexlContextBuilder().fields(userTO).build();
+
+        assertEquals("username1/", jexlTools.evaluateExpression("username + 
'/' + password", ctx));
+    }
+
+    @Test
+    void permissionTemplate() {
+        UserTO userTO = new UserTO();
+        userTO.setUsername("username1");
+        userTO.setPassword("userPassword1");
+        userTO.getMemberships().add(new 
MembershipTO.Builder("groupKey").groupName("groupName").build());
+
+        assertEquals(
+                "I am username1, my password is ''; my group is groupName",
+                jexlTools.evaluateTemplate(
+                        "I am ${user.username}, my password is 
'${user.password}'; "
+                        + "my group is ${user.memberships[0].groupName}",
+                        new MapContext(Map.of("user", userTO))));
+
+        User user = entityFactory.newEntity(User.class);
+        user.setUsername("username1");
+        user.setPassword("password1");
+
+        Group group = entityFactory.newEntity(Group.class);
+        group.setName("groupName");
+        UMembership membership = entityFactory.newEntity(UMembership.class);
+        membership.setLeftEnd(user);
+        membership.setRightEnd(group);
+        user.add(membership);
+
+        User manager = entityFactory.newEntity(User.class);
+        manager.setUsername("usernameM1");
+        manager.setPassword("passwordM1");
+        user.setuManager(manager);
+
+        assertEquals(
+                "I am username1, my password is ''; "
+                + "my manager is usernameM1, their password is ''; "
+                + "my group is groupName",
+                jexlTools.evaluateTemplate(
+                        "I am ${user.username}, my password is 
'${user.password}'; "
+                        + "my manager is ${user.uManager.username}, their 
password is '${user.uManager.password}'; "
+                        + "my group is ${user.memberships[0].rightEnd.name}",
+                        new MapContext(Map.of("user", user))));
+    }
+}
diff --git 
a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/notification/DefaultNotificationManagerTest.java
 
b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/notification/DefaultNotificationManagerTest.java
index 954650764d..3e456e6e7a 100644
--- 
a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/notification/DefaultNotificationManagerTest.java
+++ 
b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/notification/DefaultNotificationManagerTest.java
@@ -35,7 +35,6 @@ import java.util.Optional;
 import org.apache.commons.jexl3.JexlBuilder;
 import org.apache.commons.jexl3.JexlEngine;
 import org.apache.commons.jexl3.MapContext;
-import org.apache.commons.jexl3.introspection.JexlPermissions;
 import org.apache.syncope.common.keymaster.client.api.ConfParamOps;
 import org.apache.syncope.common.lib.Attr;
 import org.apache.syncope.common.lib.SyncopeConstants;
@@ -140,7 +139,7 @@ public class DefaultNotificationManagerTest {
     void init() {
         JexlEngine jexlEngine = new JexlBuilder().
                 loader(new EmptyClassLoader()).
-                permissions(JexlPermissions.RESTRICTED.compose("java.time.*", 
"org.apache.syncope.*")).
+                permissions(JexlTools.DEFAULT_PERMISSIONS).
                 namespaces(Map.of("syncope", new SyncopeJexlFunctions())).
                 cache(512).
                 silent(false).
diff --git 
a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
 
b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
index 6b59cc2bda..bd147b88ed 100644
--- 
a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
+++ 
b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
@@ -122,8 +122,8 @@ public class ElasticsearchUtils {
         builder.put("lastChangeContext", any.getLastChangeContext());
         builder.put("status", any.getStatus());
         builder.put("auxClasses", 
any.getAuxClasses().stream().map(AnyTypeClass::getKey).toList());
-        Optional.ofNullable(any.getUManager()).ifPresent(um -> 
builder.put("uManager", um.getKey()));
-        Optional.ofNullable(any.getGManager()).ifPresent(gm -> 
builder.put("gManager", gm.getKey()));
+        Optional.ofNullable(any.getuManager()).ifPresent(um -> 
builder.put("uManager", um.getKey()));
+        Optional.ofNullable(any.getgManager()).ifPresent(gm -> 
builder.put("gManager", gm.getKey()));
 
         switch (any) {
             case AnyObject anyObject -> {
diff --git 
a/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchUtils.java
 
b/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchUtils.java
index b206a4e363..11b0dc28e5 100644
--- 
a/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchUtils.java
+++ 
b/ext/opensearch/client-opensearch/src/main/java/org/apache/syncope/ext/opensearch/client/OpenSearchUtils.java
@@ -122,8 +122,8 @@ public class OpenSearchUtils {
         builder.put("lastChangeContext", any.getLastChangeContext());
         builder.put("status", any.getStatus());
         builder.put("auxClasses", 
any.getAuxClasses().stream().map(AnyTypeClass::getKey).toList());
-        Optional.ofNullable(any.getUManager()).ifPresent(um -> 
builder.put("uManager", um.getKey()));
-        Optional.ofNullable(any.getGManager()).ifPresent(gm -> 
builder.put("gManager", gm.getKey()));
+        Optional.ofNullable(any.getuManager()).ifPresent(um -> 
builder.put("uManager", um.getKey()));
+        Optional.ofNullable(any.getgManager()).ifPresent(gm -> 
builder.put("gManager", gm.getKey()));
 
         switch (any) {
             case AnyObject anyObject -> {
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
index de03f3ed79..177dd7ecc2 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/GroupITCase.java
@@ -114,7 +114,7 @@ public class GroupITCase extends AbstractITCase {
     public void create() {
         // create group managed by f779c0d4-633b-4be5-8f57-32eb478a3ca5
         GroupCR groupCR = getSample("lastGroup");
-        groupCR.setGManager("f779c0d4-633b-4be5-8f57-32eb478a3ca5");
+        groupCR.setgManager("f779c0d4-633b-4be5-8f57-32eb478a3ca5");
 
         GroupTO groupTO = createGroup(groupCR).getEntity();
         assertNotNull(groupTO);
@@ -133,9 +133,9 @@ public class GroupITCase extends AbstractITCase {
         // remove group manager
         GroupUR groupUR = new GroupUR();
         groupUR.setKey(groupTO.getKey());
-        groupUR.setGManager(new 
StringReplacePatchItem.Builder().operation(PatchOperation.DELETE).build());
+        groupUR.setgManager(new 
StringReplacePatchItem.Builder().operation(PatchOperation.DELETE).build());
 
-        assertNull(updateGroup(groupUR).getEntity().getGManager());
+        assertNull(updateGroup(groupUR).getEntity().getgManager());
     }
 
     @Test
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ManagerITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ManagerITCase.java
index 498eced672..3c8779c5d9 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ManagerITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/ManagerITCase.java
@@ -134,10 +134,10 @@ public class ManagerITCase extends AbstractITCase {
         assertNotNull(manager);
 
         GroupCR groupCR = GroupITCase.getSample("uManagerTestGroup");
-        groupCR.setUManager(manager.getKey());
+        groupCR.setuManager(manager.getKey());
         GroupTO group = createGroup(groupCR).getEntity();
         assertNotNull(group);
-        assertEquals(manager.getKey(), group.getUManager());
+        assertEquals(manager.getKey(), group.getuManager());
 
         UserCR managedCR = 
UserITCase.getUniqueSample("[email protected]");
         managedCR.getMemberships().add(new 
MembershipTO.Builder(group.getKey()).build());
@@ -178,9 +178,9 @@ public class ManagerITCase extends AbstractITCase {
         assertNotNull(manager);
 
         UserCR managedCR = 
UserITCase.getUniqueSample("[email protected]");
-        managedCR.setGManager(group.getKey());
+        managedCR.setgManager(group.getKey());
         UserTO managed = createUser(managedCR).getEntity();
-        assertEquals(group.getKey(), managed.getGManager());
+        assertEquals(group.getKey(), managed.getgManager());
 
         // check
         check(
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
index e93d93a76d..b4cdf44164 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
@@ -474,8 +474,8 @@ public class PullTaskITCase extends AbstractTaskITCase {
         assertEquals("testLDAPGroup", groupTO.getName());
         assertTrue(groupTO.getLastChangeContext().contains("Task " + 
task.getKey()));
         assertEquals("true", 
groupTO.getPlainAttr("show").orElseThrow().getValues().getFirst());
-        assertEquals(matchingUsers.getResult().getFirst().getKey(), 
groupTO.getUManager());
-        assertNull(groupTO.getGManager());
+        assertEquals(matchingUsers.getResult().getFirst().getKey(), 
groupTO.getuManager());
+        assertNull(groupTO.getgManager());
         // SYNCOPE-1343, set value title to null on LDAP
         ConnObject userConnObject = RESOURCE_SERVICE.readConnObject(
                 RESOURCE_NAME_LDAP, AnyTypeKind.USER.name(), 
matchingUsers.getResult().getFirst().getKey());
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
index d00db37e8b..227bd80520 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserIssuesITCase.java
@@ -1947,10 +1947,10 @@ public class UserIssuesITCase extends AbstractITCase {
         UserCR userCR = 
UserITCase.getUniqueSample("[email protected]");
         userCR.getResources().add(RESOURCE_NAME_TESTDB);
         userCR.setPassword("Password123!");
-        userCR.setUManager(USER_SERVICE.read("puccini").getKey());
+        userCR.setuManager(USER_SERVICE.read("puccini").getKey());
         ProvisioningResult<UserTO> pr = createUser(userCR);
         assertEquals(ExecStatus.SUCCESS, 
pr.getPropagationStatuses().getFirst().getStatus());
-        assertNotNull(pr.getEntity().getUManager());
+        assertNotNull(pr.getEntity().getuManager());
         // 2. pull from resource-testdb
         PullTaskTO pullTaskTO = new PullTaskTO();
         pullTaskTO.setPerformCreate(true);
@@ -1963,17 +1963,17 @@ public class UserIssuesITCase extends AbstractITCase {
                         .build(), pullTaskTO);
         // user manager should be kept
         UserTO updatedUser = USER_SERVICE.read(pr.getEntity().getKey());
-        assertNotNull(updatedUser.getUManager());
-        assertEquals(USER_SERVICE.read("puccini").getKey(), 
updatedUser.getUManager());
+        assertNotNull(updatedUser.getuManager());
+        assertEquals(USER_SERVICE.read("puccini").getKey(), 
updatedUser.getuManager());
 
         // perform the same check on a group
         GroupCR groupCR = GroupITCase.getSample("issue1965grp");
         groupCR.getResources().add(RESOURCE_NAME_LDAP);
-        groupCR.setGManager(GROUP_SERVICE.read("managingDirector").getKey());
+        groupCR.setgManager(GROUP_SERVICE.read("managingDirector").getKey());
         ProvisioningResult<GroupTO> prGrp = createGroup(groupCR);
         assertEquals(ExecStatus.SUCCESS, 
prGrp.getPropagationStatuses().getFirst().getStatus());
-        assertNotNull(prGrp.getEntity().getGManager());
-        assertEquals(GROUP_SERVICE.read("managingDirector").getKey(), 
prGrp.getEntity().getGManager());
+        assertNotNull(prGrp.getEntity().getgManager());
+        assertEquals(GROUP_SERVICE.read("managingDirector").getKey(), 
prGrp.getEntity().getgManager());
 
         // 2. pull from resource-ldap
         pullTaskTO = new PullTaskTO();
@@ -1988,7 +1988,7 @@ public class UserIssuesITCase extends AbstractITCase {
                         .build(), pullTaskTO);
         // group manager should be kept
         GroupTO updatedGrp = GROUP_SERVICE.read(prGrp.getEntity().getKey());
-        assertNotNull(updatedGrp.getGManager());
-        assertEquals(GROUP_SERVICE.read("managingDirector").getKey(), 
updatedGrp.getGManager());
+        assertNotNull(updatedGrp.getgManager());
+        assertEquals(GROUP_SERVICE.read("managingDirector").getKey(), 
updatedGrp.getgManager());
     }
 }

Reply via email to