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

madhan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new d6c251699 RANGER-5340: fix incorrect isFinal flag in 
RangerResourceACLs for GDS ACLs (#687)
d6c251699 is described below

commit d6c251699844d09e59d6ecc4c9aecf3fff56e18a
Author: Madhan Neethiraj <[email protected]>
AuthorDate: Thu Sep 25 20:03:34 2025 -0700

    RANGER-5340: fix incorrect isFinal flag in RangerResourceACLs for GDS ACLs 
(#687)
---
 .../plugin/policyengine/RangerResourceACLs.java    |  71 ++++++---
 .../policyevaluator/RangerPolicyEvaluator.java     |  11 ++
 .../ranger/plugin/service/RangerBasePlugin.java    |   6 +-
 .../ranger/plugin/policyengine/TestPolicyACLs.java | 166 +--------------------
 .../resources/plugin/test_base_plugin_hive.json    |  42 +++---
 .../policyengine/test_aclprovider_default.json     |  53 ++++---
 .../policyengine/test_aclprovider_hdfs.json        |   9 +-
 .../policyengine/test_aclprovider_mask_filter.json |  36 +++--
 .../test_aclprovider_resource_hierarchy_tags.json  |  30 ++--
 9 files changed, 168 insertions(+), 256 deletions(-)

diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerResourceACLs.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerResourceACLs.java
index e2466a402..95af05290 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerResourceACLs.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerResourceACLs.java
@@ -117,46 +117,73 @@ public void finalizeAcls() {
 
     public void setUserAccessInfo(String userName, String accessType, Integer 
access, RangerPolicy policy) {
         Map<String, AccessResult> userAccessInfo = 
userACLs.computeIfAbsent(userName, k -> new HashMap<>());
+        AccessResult              existingResult = 
userAccessInfo.get(accessType);
 
-        AccessResult accessResult = userAccessInfo.get(accessType);
-
-        if (accessResult == null) {
-            accessResult = new AccessResult(access, policy);
-
-            userAccessInfo.put(accessType, accessResult);
+        if (existingResult == null) {
+            userAccessInfo.put(accessType, new AccessResult(access, policy));
         } else if (!ACCESS_CONDITIONAL.equals(access)) {
-            accessResult.setResult(access);
-            accessResult.setPolicy(policy);
+            existingResult.setResult(access);
+            existingResult.setPolicy(policy);
         }
     }
 
     public void setGroupAccessInfo(String groupName, String accessType, 
Integer access, RangerPolicy policy) {
         Map<String, AccessResult> groupAccessInfo = 
groupACLs.computeIfAbsent(groupName, k -> new HashMap<>());
+        AccessResult              existingResult  = 
groupAccessInfo.get(accessType);
 
-        AccessResult accessResult = groupAccessInfo.get(accessType);
-
-        if (accessResult == null) {
-            accessResult = new AccessResult(access, policy);
-
-            groupAccessInfo.put(accessType, accessResult);
+        if (existingResult == null) {
+            groupAccessInfo.put(accessType, new AccessResult(access, policy));
         } else if (!ACCESS_CONDITIONAL.equals(access)) {
-            accessResult.setResult(access);
-            accessResult.setPolicy(policy);
+            existingResult.setResult(access);
+            existingResult.setPolicy(policy);
         }
     }
 
     public void setRoleAccessInfo(String roleName, String accessType, Integer 
access, RangerPolicy policy) {
         Map<String, AccessResult> roleAccessInfo = 
roleACLs.computeIfAbsent(roleName, k -> new HashMap<>());
+        AccessResult              existingResult = 
roleAccessInfo.get(accessType);
 
-        AccessResult accessResult = roleAccessInfo.get(accessType);
+        if (existingResult == null) {
+            roleAccessInfo.put(accessType, new AccessResult(access, policy));
+        } else if (!ACCESS_CONDITIONAL.equals(access)) {
+            existingResult.setResult(access);
+            existingResult.setPolicy(policy);
+        }
+    }
 
-        if (accessResult == null) {
-            accessResult = new AccessResult(access, policy);
+    public void setUserAccessInfo(String userName, String accessType, 
AccessResult accessResult) {
+        Map<String, AccessResult> userAccessInfo = 
userACLs.computeIfAbsent(userName, k -> new HashMap<>());
+        AccessResult              existingResult = 
userAccessInfo.get(accessType);
 
+        if (existingResult == null) {
+            userAccessInfo.put(accessType, accessResult);
+        } else if (!ACCESS_CONDITIONAL.equals(accessResult.getResult())) {
+            existingResult.setResult(accessResult.getResult());
+            existingResult.setPolicy(accessResult.getPolicy());
+        }
+    }
+
+    public void setGroupAccessInfo(String groupName, String accessType, 
AccessResult accessResult) {
+        Map<String, AccessResult> groupAccessInfo = 
groupACLs.computeIfAbsent(groupName, k -> new HashMap<>());
+        AccessResult              existingResult  = 
groupAccessInfo.get(accessType);
+
+        if (existingResult == null) {
+            groupAccessInfo.put(accessType, accessResult);
+        } else if (!ACCESS_CONDITIONAL.equals(accessResult.getResult())) {
+            existingResult.setResult(accessResult.getResult());
+            existingResult.setPolicy(accessResult.getPolicy());
+        }
+    }
+
+    public void setRoleAccessInfo(String roleName, String accessType, 
AccessResult accessResult) {
+        Map<String, AccessResult> roleAccessInfo = 
roleACLs.computeIfAbsent(roleName, k -> new HashMap<>());
+        AccessResult              existingResult = 
roleAccessInfo.get(accessType);
+
+        if (existingResult == null) {
             roleAccessInfo.put(accessType, accessResult);
-        } else if (!ACCESS_CONDITIONAL.equals(access)) {
-            accessResult.setResult(access);
-            accessResult.setPolicy(policy);
+        } else if (!ACCESS_CONDITIONAL.equals(accessResult.getResult())) {
+            existingResult.setResult(accessResult.getResult());
+            existingResult.setPolicy(accessResult.getPolicy());
         }
     }
 
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerPolicyEvaluator.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerPolicyEvaluator.java
index be0ce29d1..11895fe76 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerPolicyEvaluator.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyevaluator/RangerPolicyEvaluator.java
@@ -606,6 +606,17 @@ void finalizeAcls(final boolean isDenyAllElse, final 
Set<String> allAccessTypeNa
             }
         }
 
+        @Override
+        public String toString() {
+            return "PolicyACLSummary{" +
+                    "usersAccessInfo=" + usersAccessInfo +
+                    ", groupsAccessInfo=" + groupsAccessInfo +
+                    ", rolesAccessInfo=" + rolesAccessInfo +
+                    ", rowFilters=" + rowFilters +
+                    ", dataMasks=" + dataMasks +
+                    '}';
+        }
+
         private void addAccess(String accessorName, AccessorType accessorType, 
String accessType, Integer access, int policyItemType) {
             final Map<String, Map<String, AccessResult>> accessorsAccessInfo;
 
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerBasePlugin.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerBasePlugin.java
index 34b9a5a2c..d529f8cb8 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerBasePlugin.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/service/RangerBasePlugin.java
@@ -1447,13 +1447,13 @@ private static void overrideACLs(final 
RangerResourceACLs chainedResourceACLs, R
 
                 switch (userType) {
                     case USER:
-                        baseResourceACLs.setUserAccessInfo(name, 
chainedAccessType, finalAccessResult.getResult(), 
finalAccessResult.getPolicy());
+                        baseResourceACLs.setUserAccessInfo(name, 
chainedAccessType, finalAccessResult);
                         break;
                     case GROUP:
-                        baseResourceACLs.setGroupAccessInfo(name, 
chainedAccessType, finalAccessResult.getResult(), 
finalAccessResult.getPolicy());
+                        baseResourceACLs.setGroupAccessInfo(name, 
chainedAccessType, finalAccessResult);
                         break;
                     case ROLE:
-                        baseResourceACLs.setRoleAccessInfo(name, 
chainedAccessType, finalAccessResult.getResult(), 
finalAccessResult.getPolicy());
+                        baseResourceACLs.setRoleAccessInfo(name, 
chainedAccessType, finalAccessResult);
                         break;
                     default:
                         break;
diff --git 
a/agents-common/src/test/java/org/apache/ranger/plugin/policyengine/TestPolicyACLs.java
 
b/agents-common/src/test/java/org/apache/ranger/plugin/policyengine/TestPolicyACLs.java
index 3faea812b..5b52aaf79 100644
--- 
a/agents-common/src/test/java/org/apache/ranger/plugin/policyengine/TestPolicyACLs.java
+++ 
b/agents-common/src/test/java/org/apache/ranger/plugin/policyengine/TestPolicyACLs.java
@@ -25,8 +25,6 @@
 import com.google.gson.JsonDeserializer;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonParseException;
-import org.apache.commons.collections.MapUtils;
-import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.authorization.hadoop.config.RangerPluginConfig;
 import 
org.apache.ranger.plugin.policyengine.RangerAccessRequest.ResourceMatchingScope;
 import org.apache.ranger.plugin.policyengine.RangerResourceACLs.DataMaskResult;
@@ -44,7 +42,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-import java.util.Set;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -127,164 +124,11 @@ private void runTests(InputStreamReader reader, String 
testName) {
 
                 RangerResourceACLs acls = 
policyEngine.getResourceACLs(request);
 
-                boolean userACLsMatched    = true;
-                boolean groupACLsMatched   = true;
-                boolean roleACLsMatched    = true;
-                boolean rowFiltersMatched  = true;
-                boolean dataMaskingMatched = true;
-
-                if (MapUtils.isNotEmpty(acls.getUserACLs()) && 
MapUtils.isNotEmpty(oneTest.userPermissions)) {
-                    assertEquals("getResourceACLs() failed! " + testCase.name 
+ ":" + oneTest.name + " - userACLsMatched", oneTest.userPermissions.size(), 
acls.getUserACLs().size());
-
-                    for (Map.Entry<String, Map<String, 
RangerResourceACLs.AccessResult>> entry :
-                            acls.getUserACLs().entrySet()) {
-                        String                                       userName 
= entry.getKey();
-                        Map<String, RangerResourceACLs.AccessResult> expected 
= oneTest.userPermissions.get(userName);
-                        if (MapUtils.isNotEmpty(entry.getValue()) && 
MapUtils.isNotEmpty(expected)) {
-                            // Compare
-                            for (Map.Entry<String, 
RangerResourceACLs.AccessResult> privilege : entry.getValue().entrySet()) {
-                                if 
(StringUtils.equals(RangerPolicyEngine.ADMIN_ACCESS, privilege.getKey())) {
-                                    continue;
-                                }
-                                RangerResourceACLs.AccessResult expectedResult 
= expected.get(privilege.getKey());
-                                if (expectedResult == null) {
-                                    userACLsMatched = false;
-                                    break;
-                                } else if 
(!expectedResult.equals(privilege.getValue())) {
-                                    userACLsMatched = false;
-                                    break;
-                                }
-                            }
-                        } else if (!(MapUtils.isEmpty(entry.getValue()) && 
MapUtils.isEmpty(expected))) {
-                            Set<String> privileges = entry.getValue().keySet();
-
-                            userACLsMatched = privileges.size() == 1 && 
privileges.contains(RangerPolicyEngine.ADMIN_ACCESS);
-
-                            break;
-                        }
-
-                        if (!userACLsMatched) {
-                            break;
-                        }
-                    }
-                } else if (!(MapUtils.isEmpty(acls.getUserACLs()) && 
MapUtils.isEmpty(oneTest.userPermissions))) {
-                    userACLsMatched = false;
-                }
-
-                if (acls.getDataMasks().isEmpty()) {
-                    dataMaskingMatched = (oneTest.dataMasks == null || 
oneTest.dataMasks.isEmpty());
-                } else if (acls.getDataMasks().size() != (oneTest.dataMasks == 
null ? 0 : oneTest.dataMasks.size())) {
-                    dataMaskingMatched = false;
-                } else {
-                    for (int i = 0; i < acls.getDataMasks().size(); i++) {
-                        DataMaskResult found    = acls.getDataMasks().get(i);
-                        DataMaskResult expected = oneTest.dataMasks.get(i);
-
-                        dataMaskingMatched = found.equals(expected);
-
-                        if (!dataMaskingMatched) {
-                            break;
-                        }
-                    }
-                }
-
-                if (acls.getRowFilters().isEmpty()) {
-                    rowFiltersMatched = (oneTest.rowFilters == null || 
oneTest.rowFilters.isEmpty());
-                } else if (acls.getRowFilters().size() != (oneTest.rowFilters 
== null ? 0 : oneTest.rowFilters.size())) {
-                    rowFiltersMatched = false;
-                } else {
-                    for (int i = 0; i < acls.getRowFilters().size(); i++) {
-                        RowFilterResult found    = acls.getRowFilters().get(i);
-                        RowFilterResult expected = oneTest.rowFilters.get(i);
-
-                        rowFiltersMatched = found.equals(expected);
-
-                        if (!rowFiltersMatched) {
-                            break;
-                        }
-                    }
-                }
-
-                if (MapUtils.isNotEmpty(acls.getGroupACLs()) && 
MapUtils.isNotEmpty(oneTest.groupPermissions)) {
-                    assertEquals("getResourceACLs() failed! " + testCase.name 
+ ":" + oneTest.name + " - groupACLsMatched", oneTest.groupPermissions.size(), 
acls.getGroupACLs().size());
-
-                    for (Map.Entry<String, Map<String, 
RangerResourceACLs.AccessResult>> entry :
-                            acls.getGroupACLs().entrySet()) {
-                        String                                       groupName 
= entry.getKey();
-                        Map<String, RangerResourceACLs.AccessResult> expected  
= oneTest.groupPermissions.get(groupName);
-                        if (MapUtils.isNotEmpty(entry.getValue()) && 
MapUtils.isNotEmpty(expected)) {
-                            // Compare
-                            for (Map.Entry<String, 
RangerResourceACLs.AccessResult> privilege : entry.getValue().entrySet()) {
-                                if 
(StringUtils.equals(RangerPolicyEngine.ADMIN_ACCESS, privilege.getKey())) {
-                                    continue;
-                                }
-                                RangerResourceACLs.AccessResult expectedResult 
= expected.get(privilege.getKey());
-                                if (expectedResult == null) {
-                                    groupACLsMatched = false;
-                                    break;
-                                } else if 
(!expectedResult.equals(privilege.getValue())) {
-                                    groupACLsMatched = false;
-                                    break;
-                                }
-                            }
-                        } else if (!(MapUtils.isEmpty(entry.getValue()) && 
MapUtils.isEmpty(expected))) {
-                            Set<String> privileges = entry.getValue().keySet();
-
-                            groupACLsMatched = privileges.size() == 1 && 
privileges.contains(RangerPolicyEngine.ADMIN_ACCESS);
-
-                            break;
-                        }
-
-                        if (!groupACLsMatched) {
-                            break;
-                        }
-                    }
-                } else if (!(MapUtils.isEmpty(acls.getGroupACLs()) && 
MapUtils.isEmpty(oneTest.groupPermissions))) {
-                    groupACLsMatched = false;
-                }
-
-                if (MapUtils.isNotEmpty(acls.getRoleACLs()) && 
MapUtils.isNotEmpty(oneTest.rolePermissions)) {
-                    assertEquals("getResourceACLs() failed! " + testCase.name 
+ ":" + oneTest.name + " - roleACLsMatched", oneTest.rolePermissions.size(), 
acls.getRoleACLs().size());
-
-                    for (Map.Entry<String, Map<String, 
RangerResourceACLs.AccessResult>> entry :
-                            acls.getRoleACLs().entrySet()) {
-                        String                                       roleName 
= entry.getKey();
-                        Map<String, RangerResourceACLs.AccessResult> expected 
= oneTest.rolePermissions.get(roleName);
-                        if (MapUtils.isNotEmpty(entry.getValue()) && 
MapUtils.isNotEmpty(expected)) {
-                            // Compare
-                            for (Map.Entry<String, 
RangerResourceACLs.AccessResult> privilege : entry.getValue().entrySet()) {
-                                if 
(StringUtils.equals(RangerPolicyEngine.ADMIN_ACCESS, privilege.getKey())) {
-                                    continue;
-                                }
-                                RangerResourceACLs.AccessResult expectedResult 
= expected.get(privilege.getKey());
-                                if (expectedResult == null) {
-                                    roleACLsMatched = false;
-                                    break;
-                                } else if 
(!expectedResult.equals(privilege.getValue())) {
-                                    roleACLsMatched = false;
-                                    break;
-                                }
-                            }
-                        } else if (!(MapUtils.isEmpty(entry.getValue()) && 
MapUtils.isEmpty(expected))) {
-                            Set<String> privileges = entry.getValue().keySet();
-
-                            roleACLsMatched = privileges.size() == 1 && 
privileges.contains(RangerPolicyEngine.ADMIN_ACCESS);
-
-                            break;
-                        }
-                        if (!roleACLsMatched) {
-                            break;
-                        }
-                    }
-                } else if (!(MapUtils.isEmpty(acls.getRoleACLs()) && 
MapUtils.isEmpty(oneTest.rolePermissions))) {
-                    roleACLsMatched = false;
-                }
-
-                assertTrue("getResourceACLs() failed! " + testCase.name + ":" 
+ oneTest.name + " - userACLsMatched", userACLsMatched);
-                assertTrue("getResourceACLs() failed! " + testCase.name + ":" 
+ oneTest.name + " - groupACLsMatched", groupACLsMatched);
-                assertTrue("getResourceACLs() failed! " + testCase.name + ":" 
+ oneTest.name + " - roleACLsMatched", roleACLsMatched);
-                assertTrue("getResourceACLs() failed! " + testCase.name + ":" 
+ oneTest.name + " - rowFiltersMatched", rowFiltersMatched);
-                assertTrue("getResourceACLs() failed! " + testCase.name + ":" 
+ oneTest.name + " - dataMaskingMatched", dataMaskingMatched);
+                assertEquals(oneTest.name + ": userACLs mismatch", 
oneTest.userPermissions, acls.getUserACLs());
+                assertEquals(oneTest.name + ": groupACLs mismatch", 
oneTest.groupPermissions, acls.getGroupACLs());
+                assertEquals(oneTest.name + ": roleACLs mismatch", 
oneTest.rolePermissions, acls.getRoleACLs());
+                assertEquals(oneTest.name + ": rowFilters mismatch", 
oneTest.rowFilters, acls.getRowFilters());
+                assertEquals(oneTest.name + ": dataMasks mismatch", 
oneTest.dataMasks, acls.getDataMasks());
             });
         }
     }
diff --git a/agents-common/src/test/resources/plugin/test_base_plugin_hive.json 
b/agents-common/src/test/resources/plugin/test_base_plugin_hive.json
index 86b0ad35d..ccd3adcd8 100644
--- a/agents-common/src/test/resources/plugin/test_base_plugin_hive.json
+++ b/agents-common/src/test/resources/plugin/test_base_plugin_hive.json
@@ -390,10 +390,10 @@
         "userACLs": {
           "res-user":   { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 100 } } },
           "tag-user":   { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 200 } } },
-          "ds-user":    { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 2001 } } },
-          "ds1-user":   { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 2001 } } },
-          "proj-user":  { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 3001 } } },
-          "proj1-user": { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 3001 } } }
+          "ds-user":    { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 2001 } } },
+          "ds1-user":   { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 2001 } } },
+          "proj-user":  { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 3001 } } },
+          "proj1-user": { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 3001 } } }
         },
         "datasets": [ "dataset-1" ],
         "projects": [ "project-1" ]
@@ -408,11 +408,11 @@
         "userACLs": {
           "res-user":   { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 100 } } },
           "tag-user":   { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 200 } } },
-          "ds-user":    { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 2001 } } },
-          "ds1-user":   { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 2001 } } },
-          "ds2-user":   { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 2002 } } },
-          "proj-user":  { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 3001 } } },
-          "proj1-user": { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 3001 } } }
+          "ds-user":    { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 2001 } } },
+          "ds1-user":   { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 2001 } } },
+          "ds2-user":   { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 2002 } } },
+          "proj-user":  { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 3001 } } },
+          "proj1-user": { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 3001 } } }
         },
         "datasets": [ "dataset-1", "dataset-2" ],
         "projects": [ "project-1" ]
@@ -427,10 +427,10 @@
         "userACLs": {
           "res-user":   { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 100 } } },
           "tag-user":   { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 200 } } },
-          "ds-user":    { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 2002 } } },
-          "ds2-user":   { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 2002 } } },
-          "proj-user":  { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 3001 } } },
-          "proj1-user": { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 3001 } } }
+          "ds-user":    { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 2002 } } },
+          "ds2-user":   { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 2002 } } },
+          "proj-user":  { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 3001 } } },
+          "proj1-user": { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 3001 } } }
         },
         "datasets": [ "dataset-2" ],
         "projects": [ "project-1" ]
@@ -445,12 +445,12 @@
         "userACLs": {
           "res-user":   { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 131 } } },
           "tag-user":   { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 203 } } },
-          "ds-user":    { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 2003 } } },
-          "ds3-user":   { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 2003 } } },
-          "ds6-user":   { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 2006 } } },
-          "proj-user":  { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 3002 } } },
-          "proj2-user": { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 3002 } } },
-          "proj4-user": { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 3004 } } }
+          "ds-user":    { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 2003 } } },
+          "ds3-user":   { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 2003 } } },
+          "ds6-user":   { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 2006 } } },
+          "proj-user":  { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 3002 } } },
+          "proj2-user": { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 3002 } } },
+          "proj4-user": { "select": { "result": 1, "isFinal": true, "policy": 
{ "id": 3004 } } }
         },
         "datasets": [ "dataset-3", "dataset-6" ],
         "projects": [ "project-2", "project-4" ]
@@ -465,8 +465,8 @@
         "userACLs": {
           "res-user":  { "select": { "result": 1, "isFinal": true, "policy": { 
"id": 141 } } },
           "tag-user":  { "select": { "result": 1, "isFinal": true, "policy": { 
"id": 204 } } },
-          "ds-user":   { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 2004 } } },
-          "ds4-user":  { "select": { "result": 1, "isFinal": false, "policy": 
{ "id": 2004 } } }
+          "ds-user":   { "select": { "result": 1, "isFinal": true, "policy": { 
"id": 2004 } } },
+          "ds4-user":  { "select": { "result": 1, "isFinal": true, "policy": { 
"id": 2004 } } }
         },
         "datasets": [ "dataset-4" ]
       }
diff --git 
a/agents-common/src/test/resources/policyengine/test_aclprovider_default.json 
b/agents-common/src/test/resources/policyengine/test_aclprovider_default.json
index 5434fd28c..105630d5e 100644
--- 
a/agents-common/src/test/resources/policyengine/test_aclprovider_default.json
+++ 
b/agents-common/src/test/resources/policyengine/test_aclprovider_default.json
@@ -583,11 +583,13 @@
       "tests": [
         { "name": "{USER} macro in database name",
           "resource": { "elements": { "database": "user_madhan", "table": 
"test_tbl1" } },
-          "groupPermissions": { "public":  { "select":  { "result": 2, 
"isFinal": true }, "update": { "result": 2, "isFinal": true } } }
+          "groupPermissions": { "public":  { "select":  { "result": 2, 
"isFinal": true }, "update": { "result": 2, "isFinal": true } } },
+          "userPermissions": {}, "rolePermissions": {}, "dataMasks": [], 
"rowFilters": []
         },
         { "name": "${{USER.dept}} macro in database name",
           "resource": { "elements": { "database": "dept_engg", "table": 
"test_tbl1" } },
-          "groupPermissions": { "public":  { "select":  { "result": 2, 
"isFinal": true } }, "engg":  { "select":  { "result": 1, "isFinal": true } } }
+          "groupPermissions": { "public":  { "select":  { "result": 2, 
"isFinal": true } }, "engg":  { "select":  { "result": 1, "isFinal": true } } },
+          "userPermissions": {}, "rolePermissions": {}, "dataMasks": [], 
"rowFilters": []
         },
       {
         "name": "denyAllElse-test",
@@ -597,74 +599,83 @@
             "user2": {"select": {"result": -1, "isFinal": true}, "update": 
{"result": -1, "isFinal": true},"create": {"result": -1, "isFinal": 
true},"drop": {"result": -1, "isFinal": true},"alter": {"result": -1, 
"isFinal": true},"index": {"result": -1, "isFinal": true},"lock": {"result": 
-1, "isFinal": true}},
             "user3": {"select": {"result": 1, "isFinal": true}, "update": 
{"result": 1, "isFinal": true},"create": {"result": 1, "isFinal": true},"drop": 
{"result": 1, "isFinal": true},"alter": {"result": 1, "isFinal": true},"index": 
{"result": 1, "isFinal": true},"lock": {"result": -1, "isFinal": true}}},
         "groupPermissions": {"public": {"select": {"result": 2, "isFinal": 
true}, "update": {"result": 2, "isFinal": true},"create": {"result": 2, 
"isFinal": true},"drop": {"result": 2, "isFinal": true},"alter": {"result": 2, 
"isFinal": true},"index": {"result": 2, "isFinal": true},"lock": {"result": -1, 
"isFinal": true}}},
-        "rolePermissions": {}
+        "rolePermissions": {}, "dataMasks": [], "rowFilters": []
       },
         {
           "name": "all-deny-test",
           "resource": {"elements":{"database":"hr", "udf":"udf" }},
           "userPermissions": {},
-          "groupPermissions": {"public": {"select":{"result":-1, 
"isFinal":true},"create":{"result":-1, "isFinal":true}}}
+          "groupPermissions": {"public": {"select":{"result":-1, 
"isFinal":true},"create":{"result":-1, "isFinal":true},"_admin":{"result":-1, 
"isFinal":true}}},
+          "rolePermissions": {}, "dataMasks": [], "rowFilters": []
         },
         {
           "name": "no-deny-test",
           "resource": {"elements":{"database":"default", "table":"test1", 
"column":"column2"}},
-          "userPermissions": {"user1":{"select":{"result":1, "isFinal":true}}, 
"user2":{"select":{"result":1, "isFinal":true}}, "admin":{"create":{"result":1, 
"isFinal":true},"drop":{"result":1, "isFinal":true}}},
-          "groupPermissions": {"group1": {"select":{"result":1, 
"isFinal":true}}, "group2": {"select":{"result":1, 
"isFinal":true}},"cluster-admin": {"create":{"result":1, 
"isFinal":true},"drop":{"result":1, "isFinal":true}}}
+          "userPermissions": {"user1":{"select":{"result":1, "isFinal":true}}, 
"user2":{"select":{"result":1, "isFinal":true}}, "admin":{"create":{"result":1, 
"isFinal":true},"drop":{"result":1, "isFinal":true},"_admin":{"result":1, 
"isFinal":true}}},
+          "groupPermissions": {"group1": {"select":{"result":1, 
"isFinal":true}}, "group2": {"select":{"result":1, 
"isFinal":true}},"cluster-admin": {"create":{"result":1, 
"isFinal":true},"drop":{"result":1, "isFinal":true}, "_admin":{"result":1, 
"isFinal":true}}},
+          "rolePermissions": {}, "dataMasks": [], "rowFilters": []
         },
         {
           "name": "partial-deny-test",
           "resource": {"elements":{"database":"default", "table":"test2", 
"column":"column2"}},
-          "userPermissions": {"user1":{"select":{"result":1, "isFinal":true}}, 
"user2":{"select":{"result":-1, "isFinal":true},"create":{"result":-1, 
"isFinal":true}}, "user3":{"select":{"result":1, 
"isFinal":true},"create":{"result":-1, 
"isFinal":true}},"user4":{"select":{"result":-1, 
"isFinal":true},"create":{"result":-1, 
"isFinal":true}},"admin":{"create":{"result":1, 
"isFinal":true},"drop":{"result":1, "isFinal":true}}},
-          "groupPermissions": {"group1": {"select":{"result":1, 
"isFinal":true}}, "group2": {"select":{"result":1, "isFinal":true}},"group3": 
{"select":{"result":-1, "isFinal":true},"create":{"result":-1, 
"isFinal":true}},"cluster-admin": {"create":{"result":1, 
"isFinal":true},"drop":{"result":1, "isFinal":true}}}
+          "userPermissions": {"user1":{"select":{"result":1, "isFinal":true}}, 
"user2":{"select":{"result":-1, "isFinal":true},"create":{"result":-1, 
"isFinal":true}}, "user3":{"select":{"result":1, 
"isFinal":true},"create":{"result":-1, 
"isFinal":true}},"user4":{"select":{"result":-1, 
"isFinal":true},"create":{"result":-1, 
"isFinal":true}},"admin":{"create":{"result":1, 
"isFinal":true},"drop":{"result":1, "isFinal":true},"_admin":{"result":1, 
"isFinal":true}}},
+          "groupPermissions": {"group1": {"select":{"result":1, 
"isFinal":true}}, "group2": {"select":{"result":1, "isFinal":true}},"group3": 
{"select":{"result":-1, "isFinal":true},"create":{"result":-1, 
"isFinal":true}},"cluster-admin": {"create":{"result":1, 
"isFinal":true},"drop":{"result":1, "isFinal":true},"_admin":{"result":1, 
"isFinal":true}}},
+          "rolePermissions": {}, "dataMasks": [], "rowFilters": []
         },
         {
           "name": "conditional-deny-test",
           "resource": {"elements":{"database":"finance", "table":"fin_1", 
"column":"salary"}},
-          "userPermissions": {"user1":{"select":{"result":1, "isFinal":true}}, 
"user2":{"select":{"result":1, "isFinal":true}}, "user3":{"select":{"result":2, 
"isFinal":true}} },
-          "groupPermissions": {"finance-controller": {"select":{"result":1, 
"isFinal":true}}, "cluster-admin": {"select":{"result":2, "isFinal":true}}}
+          "userPermissions": {"user1":{"select":{"result":1, 
"isFinal":true},"_admin":{"result":1, "isFinal":true}}, 
"user2":{"select":{"result":1, "isFinal":true},"_admin":{"result":1, 
"isFinal":true}}, "user3":{"select":{"result":2, 
"isFinal":true},"_admin":{"result":2, "isFinal":true}} },
+          "groupPermissions": {"finance-controller": {"select":{"result":1, 
"isFinal":true},"_admin":{"result":1, "isFinal":true}}, "cluster-admin": 
{"select":{"result":2, "isFinal":true},"_admin":{"result":2, "isFinal":true}}},
+          "rolePermissions": {}, "dataMasks": [], "rowFilters": []
         },
         {
           "name": "conditional-tag-only-test-descendant",
           "resource": {"elements":{"database":"finance", "table":"sales"}},
           "resourceMatchingScope": "SELF_OR_DESCENDANTS",
-          "userPermissions": {"hive":{"select":{"result":-1, 
"isFinal":true},"create":{"result":1, "isFinal":true}, "drop":{"result":-1, 
"isFinal":true}}, "admin":{"select":{"result":-1, "isFinal":true}} },
-          "groupPermissions": {"public": {"index":{"result":2, 
"isFinal":true}}}
+          "userPermissions": {"hive":{"select":{"result":-1, 
"isFinal":true},"create":{"result":1, "isFinal":true}}, 
"admin":{"select":{"result":-1, "isFinal":true}} },
+          "groupPermissions": {"public": {"index":{"result":2, 
"isFinal":true}}},
+          "rolePermissions": {}, "dataMasks": [], "rowFilters": []
         },
         {
           "name": "all-types-of-policy-items",
           "resource": {"elements":{"database":"default", "table":"table", 
"column":"column"}},
-          "userPermissions": {"user1":{"select":{"result":2, "isFinal":true}}, 
"user2":{"select":{"result":2, "isFinal":true}}, "user3":{"select":{"result":2, 
"isFinal":true}}, "user4":{"select":{"result":2, "isFinal":true}} },
-          "groupPermissions": {"public": {"select":{"result":2, 
"isFinal":true}}, "cluster-admin": {"select":{"result":2, "isFinal":true}}}
+          "userPermissions": {"user1":{"select":{"result":2, "isFinal":true}, 
"_admin":{"result":2, "isFinal":true}}, "user2":{"select":{"result":2, 
"isFinal":true}, "_admin":{"result":2, "isFinal":true}}, 
"user3":{"select":{"result":2, "isFinal":true}, "_admin":{"result":2, 
"isFinal":true}}, "user4":{"select":{"result":2, "isFinal":true}, 
"_admin":{"result":2, "isFinal":true}} },
+          "groupPermissions": {"public": {"select":{"result":2, 
"isFinal":true}, "_admin":{"result":2, "isFinal":true}}, "cluster-admin": 
{"select":{"result":2, "isFinal":true}, "_admin":{"result":2, "isFinal":true}}},
+          "rolePermissions": {}, "dataMasks": [], "rowFilters": []
         },
         {
           "name": "public-allow-test",
           "resource": {"elements":{"database":"finance", "table":"accounts", 
"column": "status" }},
-          "userPermissions": {"john":{"select":{"result":2, "isFinal":true}, 
"update":{"result":2, "isFinal":true}}, "jane":{"select":{"result":2, 
"isFinal":true},"update":{"result":2, "isFinal":true}}},
-          "groupPermissions": {"public": {"select":{"result":2, 
"isFinal":true}}, "accounting": {"select":{"result":2, 
"isFinal":true},"update":{"result":2, "isFinal":true}}, "admin": 
{"select":{"result":2, "isFinal":true},"update":{"result":2, "isFinal":true}}, 
"housekeeping":{"select":{"result":-1, "isFinal":true}}}
+          "userPermissions": {"john":{"select":{"result":2, "isFinal":true}, 
"update":{"result":2, "isFinal":true}, "_admin":{"result": 2, "isFinal": 
true}}, "jane":{"select":{"result":2, "isFinal":true},"update":{"result":2, 
"isFinal":true}, "_admin":{"result": 2, "isFinal": true}}},
+          "groupPermissions": {"public": {"select":{"result":2, 
"isFinal":true}}, "accounting": {"select":{"result":2, 
"isFinal":true},"update":{"result":2, "isFinal":true},"_admin":{"result":2, 
"isFinal":true}}, "admin": {"select":{"result":2, 
"isFinal":true},"update":{"result":2, "isFinal":true},"_admin":{"result":2, 
"isFinal":true}}, "housekeeping":{"select":{"result":-1, "isFinal":true}}},
+          "rolePermissions": {}, "dataMasks": [], "rowFilters": []
         },
         {
           "name": "public-allow-test-next",
           "resource": {"elements":{"database":"finance", "table":"accounts", 
"column": "amount" }},
-          "userPermissions": {"john":{"select":{"result":2, "isFinal":true}, 
"update":{"result":2, "isFinal":true}}, "jane":{"select":{"result":2, 
"isFinal":true},"update":{"result":2, "isFinal":true}}},
-          "groupPermissions": {"public": {"select":{"result":2, 
"isFinal":true}}, "accounting": {"select":{"result":2, 
"isFinal":true},"update":{"result":2, "isFinal":true}}, "admin": 
{"select":{"result":2, "isFinal":true},"update":{"result":2, "isFinal":true}}, 
"housekeeping":{"drop":{"result":-1, "isFinal":true}}}
+          "userPermissions": {"john":{"select":{"result":2, "isFinal":true}, 
"update":{"result":2, "isFinal":true}, "_admin":{"result":2, "isFinal":true}}, 
"jane":{"select":{"result":2, "isFinal":true},"update":{"result":2, 
"isFinal":true}, "_admin":{"result":2, "isFinal":true}}},
+          "groupPermissions": {"public": {"select":{"result":2, 
"isFinal":true}}, "accounting": {"select":{"result":2, 
"isFinal":true},"update":{"result":2, "isFinal":true},"_admin":{"result":2, 
"isFinal":true}}, "admin": {"select":{"result":2, 
"isFinal":true},"update":{"result":2, "isFinal":true},"_admin":{"result":2, 
"isFinal":true}}, "housekeeping":{"drop":{"result":-1, "isFinal":true}}},
+          "rolePermissions": {}, "dataMasks": [], "rowFilters": []
         },
         {
           "name": "conditions-in-exceptions-test",
           "resource": {"elements":{"database":"db1", "table":"tbl1", "column": 
"col1" }},
           "userPermissions": {"john":{"select":{"result":2, "isFinal":true}, 
"update":{"result":2, "isFinal":true}}, "jane":{"select":{"result":2, 
"isFinal":true},"update":{"result":2, "isFinal":true}}, 
"adam":{"drop":{"result":2, "isFinal":true}}, "eve":{"drop":{"result":2, 
"isFinal":true}}},
-          "groupPermissions": {}
+          "groupPermissions": {}, "rolePermissions": {}, "dataMasks": [], 
"rowFilters": []
         },
         {
           "name": "conditions-in-some-exceptions-test",
           "resource": {"elements":{"database":"db2", "table":"tbl2", "column": 
"col2" }},
           "userPermissions": {"john":{"select":{"result":1, "isFinal":true}, 
"update":{"result":-1, "isFinal":true}}, "jane":{"select":{"result":1, 
"isFinal":true},"update":{"result":1, "isFinal":true}}, 
"adam":{"drop":{"result":2, "isFinal":true}}, "eve":{"drop":{"result":2, 
"isFinal":true}}},
-          "groupPermissions": {}
+          "groupPermissions": {}, "rolePermissions": {}, "dataMasks": [], 
"rowFilters": []
         },
         {
           "name": "roles-test",
           "resource": {"elements":{"database":"db3", "table":"tbl3", "column": 
"col3" }},
           "userPermissions": {"john":{"select":{"result":1, "isFinal":true}, 
"update":{"result":1, "isFinal":true}}, "jane":{"select":{"result":1, 
"isFinal":true},"update":{"result":1, "isFinal":true}}, 
"adam":{"drop":{"result":-1, "isFinal":true}}, "eve":{"drop":{"result":-1, 
"isFinal":true}}},
-          "rolePermissions": {"tarzan":{"select":{"result":1, "isFinal":true}, 
"update":{"result":1, "isFinal":true}}, "eden":{"drop":{"result":-1, 
"isFinal":true}}}
+          "rolePermissions": {"tarzan":{"select":{"result":1, "isFinal":true}, 
"update":{"result":1, "isFinal":true}}, "eden":{"drop":{"result":-1, 
"isFinal":true}}},
+          "groupPermissions": {}, "dataMasks": [], "rowFilters": []
         }
       ]
     }
diff --git 
a/agents-common/src/test/resources/policyengine/test_aclprovider_hdfs.json 
b/agents-common/src/test/resources/policyengine/test_aclprovider_hdfs.json
index 9526763a2..37a06787d 100644
--- a/agents-common/src/test/resources/policyengine/test_aclprovider_hdfs.json
+++ b/agents-common/src/test/resources/policyengine/test_aclprovider_hdfs.json
@@ -107,23 +107,20 @@
         {
           "name": "test-finance-restricted",
           "resource": {"elements":{"path":"/finance/restricted"}},
-          "userPermissions": {},
           "groupPermissions": {"finance": {"read": {"result": 1, "isFinal": 
true}}},
-          "rolePermissions": {}
+          "userPermissions": {}, "rolePermissions": {}, "rowFilters": [], 
"dataMasks": []
         },
         {
           "name": "test-finance-limited",
           "resource": {"elements":{"path":"/finance/limited"}},
-          "userPermissions": {},
           "groupPermissions": {"stewards": {"read": {"result": 1, "isFinal": 
true}}},
-          "rolePermissions": {}
+          "userPermissions": {}, "rolePermissions": {}, "rowFilters": [], 
"dataMasks": []
         },
         {
           "name": "test-anything-under-public",
           "resource": {"elements":{"path":"/public/anything"}},
-          "userPermissions": {},
           "groupPermissions": {"public": {"read": {"result": 1, "isFinal": 
true}, "execute": {"result": 1, "isFinal": true}}},
-          "rolePermissions": {}
+          "userPermissions": {}, "rolePermissions": {}, "rowFilters": [], 
"dataMasks": []
         }
       ]
     }
diff --git 
a/agents-common/src/test/resources/policyengine/test_aclprovider_mask_filter.json
 
b/agents-common/src/test/resources/policyengine/test_aclprovider_mask_filter.json
index c8f7acf5e..ae9c04a6f 100644
--- 
a/agents-common/src/test/resources/policyengine/test_aclprovider_mask_filter.json
+++ 
b/agents-common/src/test/resources/policyengine/test_aclprovider_mask_filter.json
@@ -326,7 +326,8 @@
             {"users":["user2"], "groups":[], "roles":[], 
"accessTypes":["select"], "maskInfo":{"dataMaskType":"SHUFFLE"}},
             {"users":["user1"], "groups":[], "roles":[], 
"accessTypes":["select"], "maskInfo":{"dataMaskType":"HASH"}},
             {"users":["user2"], "groups":[], "roles":[], 
"accessTypes":["select"], "maskInfo":{"dataMaskType":"MASK"}}
-          ]
+          ],
+          "userPermissions": {}, "groupPermissions": {}, "rolePermissions": 
{}, "rowFilters": []
         },
         {"name":"mask: hr.employee.date_of_birth",
           "resource":{"elements":{"database":"hr", "table":"employee", 
"column":"date_of_birth"}},
@@ -334,56 +335,64 @@
             {"users":["user1"], "groups":[], "roles":[], 
"accessTypes":["select"], "maskInfo":{"dataMaskType":"MASK"}},
             {"users":["user2"], "groups":[], "roles":[], 
"accessTypes":["select"], "maskInfo":{"dataMaskType":"SHUFFLE"}},
             {"users":["user3"], "groups":[], "roles":[], 
"accessTypes":["select"], "maskInfo":{"dataMaskType":"LAST_4"}, 
"isConditional":  true}
-          ]
+          ],
+          "userPermissions": {}, "groupPermissions": {}, "rolePermissions": 
{}, "rowFilters": []
         },
         {"name":"mask: hr.employee.project - conditional: validity-schedule",
           "resource":{"elements":{"database":"hr", "table":"employee", 
"column":"project"}},
           "dataMasks": [
             {"users":["user1"], "groups":[], "roles":[], 
"accessTypes":["select"], "maskInfo":{"dataMaskType":"MASK"}, "isConditional": 
true},
             {"users":["user2"], "groups":[], "roles":[], 
"accessTypes":["select"], "maskInfo":{"dataMaskType":"HASH"}, "isConditional": 
true}
-          ]
+          ],
+          "userPermissions": {}, "groupPermissions": {}, "rolePermissions": 
{}, "rowFilters": []
         },
         {"name":"mask: employee.personal.city - tag-based: RESTRICTED",
           "resource":{"elements":{"database":"employee", "table":"personal", 
"column":"city"}},
           "dataMasks": [
             {"users":["user1"], "groups":[], "roles":[], 
"accessTypes":["select"], "maskInfo":{"dataMaskType":"MASK"}},
             {"users":["user2"], "groups":[], "roles":[], 
"accessTypes":["select"], "maskInfo":{"dataMaskType":"HASH"}}
-          ]
+          ],
+          "userPermissions": {}, "groupPermissions": {}, "rolePermissions": 
{}, "rowFilters": []
         },
         {"name":"mask: employee.personal.mrn - tag-based: DATA_QUALITY; 
conditional",
           "resource":{"elements":{"database":"employee", "table":"personal", 
"column":"mrn"}},
           "dataMasks": [
             {"users":["user1"], "groups":[], "roles":[], 
"accessTypes":["select"], "maskInfo":{"dataMaskType":"MASK"}, "isConditional": 
true},
             {"users":["user2"], "groups":[], "roles":[], 
"accessTypes":["select"], "maskInfo":{"dataMaskType":"HASH"}, "isConditional": 
true}
-          ]
+          ],
+          "userPermissions": {}, "groupPermissions": {}, "rolePermissions": 
{}, "rowFilters": []
         },
         {"name":"mask: employee.personal.address - tag-based: 
RESTRICTED-FINAL; conditional: validity-schedule",
           "resource":{"elements":{"database":"employee", "table":"personal", 
"column":"address"}},
           "dataMasks": [
             {"users":["user1"], "groups":[], "roles":[], 
"accessTypes":["select"], "maskInfo":{"dataMaskType":"MASK"}, "isConditional": 
true},
             {"users":["user2"], "groups":[], "roles":[], 
"accessTypes":["select"], "maskInfo":{"dataMaskType":"HASH"}, "isConditional": 
true}
-          ]
+          ],
+          "userPermissions": {}, "groupPermissions": {}, "rolePermissions": 
{}, "rowFilters": []
         },
         {"name":"mask: finance.forecast.revenue - tag-based: RESTRICTED; 
conditional: tag-validity-period",
           "resource":{"elements":{"database":"finance", "table":"forecast", 
"column":"revenue"}},
           "dataMasks": [
             {"users":["user1"], "groups":[], "roles":[], 
"accessTypes":["select"], "maskInfo":{"dataMaskType":"MASK"}, "isConditional": 
true},
             {"users":["user2"], "groups":[], "roles":[], 
"accessTypes":["select"], "maskInfo":{"dataMaskType":"HASH"}, "isConditional": 
true}
-          ]
+          ],
+          "userPermissions": {}, "groupPermissions": {}, "rolePermissions": 
{}, "rowFilters": []
         },
         { "name": "mask: test_db.dept_hr.col1: conditional",
           "resource": { "elements": { "database": "test_db", 
"table":"dept_hr", "column":"col1" } },
           "dataMasks": [
             { "users": [ ], "groups": [ "public" ], "roles": [], 
"accessTypes": [ "select" ], "maskInfo": { "dataMaskType": "MASK_NONE" }, 
"isConditional": true },
             { "users": [ ], "groups": [ "public" ], "roles": [], 
"accessTypes": [ "select" ], "maskInfo": { "dataMaskType": "MASK_HASH" }, 
"isConditional": false }
-          ]
+          ],
+          "userPermissions": {}, "groupPermissions": {}, "rolePermissions": 
{}, "rowFilters": []
         },
         {"name":"row-filter: employee.personal",
           "resource":{"elements":{"database":"employee", "table":"personal"}},
           "rowFilters":[
             {"users":["user1"], "groups":[], "roles":[], 
"accessTypes":["select"], "filterInfo":{"filterExpr":"location='US'"}},
             {"users":["user2"], "groups":[], "roles":[], 
"accessTypes":["select"], "filterInfo":{"filterExpr":"location='CA'"}}
-          ]
+          ],
+          "userPermissions": {}, "groupPermissions": {}, "rolePermissions": 
{}, "dataMasks": []
         },
         {"name":"row-filter: hr.employee",
           "resource":{"elements":{"database":"hr", "table":"employee"}},
@@ -391,21 +400,24 @@
             {"users":["user1"], "groups":[], "roles":[], 
"accessTypes":["select"], "filterInfo":{"filterExpr":"dept='production'"}},
             {"users":["user2"], "groups":[], "roles":[], 
"accessTypes":["select"], "filterInfo":{"filterExpr":"dept='purchase'"}},
             {"users":["user3"], "groups":[], "roles":[], 
"accessTypes":["select"], "filterInfo":{"filterExpr":"location='GR'"}, 
"isConditional":  true}
-          ]
+          ],
+          "userPermissions": {}, "groupPermissions": {}, "rolePermissions": 
{}, "dataMasks": []
         },
         {"name":"row-filter: hr.employee2 - conditional: validity-schedule",
           "resource":{"elements":{"database":"hr", "table":"employee2"}},
           "rowFilters":[
             {"users":["user1"], "groups":[], "roles":[], 
"accessTypes":["select"], "filterInfo":{"filterExpr":"dept='production'"}, 
"isConditional": true},
             {"users":["user2"], "groups":[], "roles":[], 
"accessTypes":["select"], "filterInfo":{"filterExpr":"dept='purchase'"}, 
"isConditional": true}
-          ]
+          ],
+          "userPermissions": {}, "groupPermissions": {}, "rolePermissions": 
{}, "dataMasks": []
         },
         { "name": "row-filter: test_db.dept_hr: conditional",
           "resource": { "elements": { "database": "test_db", "table":"dept_hr" 
} },
           "rowFilters": [
             { "users": [], "groups": [ "public" ], "roles": [], "accessTypes": 
[ "select" ], "filterInfo": { "filterExpr": "1 = 1" },        "isConditional": 
true },
             { "users": [], "groups": [ "public" ], "roles": [], "accessTypes": 
[ "select" ], "filterInfo": { "filterExpr": "dept != 'hr'" }, "isConditional": 
false }
-          ]
+          ],
+          "userPermissions": {}, "groupPermissions": {}, "rolePermissions": 
{}, "dataMasks": []
         }
       ]
     }
diff --git 
a/agents-common/src/test/resources/policyengine/test_aclprovider_resource_hierarchy_tags.json
 
b/agents-common/src/test/resources/policyengine/test_aclprovider_resource_hierarchy_tags.json
index 206a6563d..4e9d29229 100644
--- 
a/agents-common/src/test/resources/policyengine/test_aclprovider_resource_hierarchy_tags.json
+++ 
b/agents-common/src/test/resources/policyengine/test_aclprovider_resource_hierarchy_tags.json
@@ -150,7 +150,8 @@
       "tests": [
         { "name":            "table: db1.tbl1",
           "resource":        { "elements": { "database": "db1", "table": 
"tbl1" } },
-          "userPermissions": { "test-user": { "select":  { "result": 1, 
"isFinal": true } } }
+          "userPermissions": { "test-user": { "select":  { "result": 1, 
"isFinal": true } } },
+          "groupPermissions": {}, "rolePermissions": {}, "rowFilters": [], 
"dataMasks": []
         },
         { "name":            "column: db1.tbl1.SSN",
           "resource":        { "elements": { "database": "db1", "table": 
"tbl1", "column": "SSN" } },
@@ -159,7 +160,8 @@
             {"users": [ "test-user" ], "groups": [], "roles": [], 
"accessTypes": [ "select" ], "maskInfo": { "dataMaskType": "SHUFFLE" },   
"isConditional": true },
             {"users": [ "test-user" ], "groups": [], "roles": [], 
"accessTypes": [ "select" ], "maskInfo": { "dataMaskType": "MASK" },      
"isConditional": true },
             {"users": [ "test-user" ], "groups": [], "roles": [], 
"accessTypes": [ "select" ], "maskInfo": { "dataMaskType": "MASK_HASH" }, 
"isConditional": true }
-          ]
+          ],
+          "groupPermissions": {}, "rolePermissions": {}, "rowFilters": []
         },
         { "name":            "column: db1.tbl1.Age",
           "resource":        { "elements": { "database": "db1", "table": 
"tbl1", "column": "Age" } },
@@ -168,7 +170,8 @@
             {"users": [ "test-user" ], "groups": [], "roles": [], 
"accessTypes": [ "select" ], "maskInfo": { "dataMaskType": "SHUFFLE" },   
"isConditional": true },
             {"users": [ "test-user" ], "groups": [], "roles": [], 
"accessTypes": [ "select" ], "maskInfo": { "dataMaskType": "MASK" },      
"isConditional": true },
             {"users": [ "test-user" ], "groups": [], "roles": [], 
"accessTypes": [ "select" ], "maskInfo": { "dataMaskType": "MASK_HASH" }, 
"isConditional": true }
-          ]
+          ],
+          "groupPermissions": {}, "rolePermissions": {}, "rowFilters": []
         },
         { "name":            "column: db1.tbl1.Name",
           "resource":        { "elements": { "database": "db1", "table": 
"tbl1", "column": "Name" } },
@@ -177,15 +180,18 @@
             {"users": [ "test-user" ], "groups": [], "roles": [], 
"accessTypes": [ "select" ], "maskInfo": { "dataMaskType": "SHUFFLE" },   
"isConditional": true },
             {"users": [ "test-user" ], "groups": [], "roles": [], 
"accessTypes": [ "select" ], "maskInfo": { "dataMaskType": "MASK" },      
"isConditional": true },
             {"users": [ "test-user" ], "groups": [], "roles": [], 
"accessTypes": [ "select" ], "maskInfo": { "dataMaskType": "MASK_HASH" }, 
"isConditional": true }
-          ]
+          ],
+          "groupPermissions": {}, "rolePermissions": {}, "rowFilters": []
         },
         { "name":            "database: db2",
           "resource":        { "elements": { "database": "db2" } },
-          "userPermissions": { "test-user": { "select":  { "result": 1, 
"isFinal": true } } }
+          "userPermissions": { "test-user": { "select":  { "result": 1, 
"isFinal": true } } },
+          "groupPermissions": {}, "rolePermissions": {}, "rowFilters": [], 
"dataMasks": []
         },
         { "name":            "table: db2.tbl1",
           "resource":        { "elements": { "database": "db2", "table": 
"tbl1" } },
-          "userPermissions": { "test-user": { "select":  { "result": 1, 
"isFinal": true } } }
+          "userPermissions": { "test-user": { "select":  { "result": 1, 
"isFinal": true } } },
+          "groupPermissions": {}, "rolePermissions": {}, "rowFilters": [], 
"dataMasks": []
         },
         { "name":            "column: db2.tbl1.Name",
           "resource":        { "elements": { "database": "db2", "table": 
"tbl1", "column": "Name" } },
@@ -194,18 +200,21 @@
             {"users": [ "test-user" ], "groups": [], "roles": [], 
"accessTypes": [ "select" ], "maskInfo": { "dataMaskType": "SHUFFLE" },   
"isConditional": true },
             {"users": [ "test-user" ], "groups": [], "roles": [], 
"accessTypes": [ "select" ], "maskInfo": { "dataMaskType": "MASK" },      
"isConditional": true },
             {"users": [ "test-user" ], "groups": [], "roles": [], 
"accessTypes": [ "select" ], "maskInfo": { "dataMaskType": "MASK_HASH" }, 
"isConditional": true }
-          ]
+          ],
+          "groupPermissions": {}, "rolePermissions": {}, "rowFilters": []
         },
         { "name":            "database: order",
           "resource":        { "elements": { "database": "order" } },
-          "userPermissions": { "dba": { "create": { "result":  1, "isFinal":  
true } } }
+          "userPermissions": { "dba": { "create": { "result":  1, "isFinal":  
true } } },
+          "groupPermissions": {}, "rolePermissions": {}, "rowFilters": [], 
"dataMasks": []
         },
         { "name":            "table: order.customer",
           "resource":        { "elements": { "database": "order", "table": 
"customer" } },
           "userPermissions": {
             "test-user": { "select":  { "result": 1, "isFinal": true } },
             "dba":       { "create":  { "result": 1, "isFinal": true } }
-          }
+          },
+          "groupPermissions": {}, "rolePermissions": {}, "rowFilters": [], 
"dataMasks": []
         },
         { "name":            "column: order.customer.address",
           "resource":        { "elements": { "database": "order", "table": 
"customer", "column": "address" } },
@@ -216,7 +225,8 @@
           "dataMasks": [
             { "users": [ "test-user" ], "groups": [], "roles": [], 
"accessTypes": [ "select" ], "maskInfo": { "dataMaskType": "MASK_NONE" }, 
"isConditional": false },
             { "users": [ "test-user" ], "groups": [], "roles": [], 
"accessTypes": [ "select" ], "maskInfo": { "dataMaskType": "MASK_HASH" }, 
"isConditional": false }
-          ]
+          ],
+          "groupPermissions": {}, "rolePermissions": {}, "rowFilters": []
         }
       ]
     }

Reply via email to