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

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


The following commit(s) were added to refs/heads/RANGER-3923 by this push:
     new 4f362e1bf RANGER-4269: gds enricher implementation to grant access 
using dataset/project policies - #2
4f362e1bf is described below

commit 4f362e1bf948db8a5e5726876c945be484842c05
Author: Madhan Neethiraj <mad...@apache.org>
AuthorDate: Wed Nov 8 18:51:13 2023 -0800

    RANGER-4269: gds enricher implementation to grant access using 
dataset/project policies - #2
---
 .../plugin/policyengine/RangerAccessResult.java    |  14 +--
 .../policyengine/RangerPolicyEngineImpl.java       |   4 +-
 .../plugin/policyengine/gds/GdsAccessResult.java   |  64 +++---------
 .../policyengine/gds/GdsDataShareEvaluator.java    |  17 ++--
 .../policyengine/gds/GdsDatasetEvaluator.java      |  19 ++--
 .../plugin/policyengine/gds/GdsPolicyEngine.java   | 110 ++++++++++++---------
 .../policyengine/gds/GdsProjectEvaluator.java      |  10 +-
 .../gds/test_gds_policy_engine_hive.json           |  46 ++++-----
 8 files changed, 130 insertions(+), 154 deletions(-)

diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResult.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResult.java
index 69e8ed9fc..402cbda68 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResult.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerAccessResult.java
@@ -25,8 +25,8 @@ import org.apache.ranger.plugin.model.RangerServiceDef;
 import org.apache.ranger.plugin.util.ServiceDefUtil;
 
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 public class RangerAccessResult {
        public  final static String KEY_MASK_TYPE      = "maskType";
@@ -328,11 +328,11 @@ public class RangerAccessResult {
                return StringUtils.isNotEmpty(getFilterExpr());
        }
 
-       public List<String> getDatasets() {
-               return additionalInfo == null ? null : (List<String>) 
additionalInfo.get(KEY_DATASETS);
+       public Set<String> getDatasets() {
+               return additionalInfo == null ? null : (Set<String>) 
additionalInfo.get(KEY_DATASETS);
        }
 
-       public void setDatasets(List<String> datasets) {
+       public void setDatasets(Set<String> datasets) {
                if (datasets == null) {
                        removeAdditionalInfo(KEY_DATASETS);
                } else {
@@ -340,11 +340,11 @@ public class RangerAccessResult {
                }
        }
 
-       public List<String> getProjects() {
-               return additionalInfo == null ? null : (List<String>) 
additionalInfo.get(KEY_PROJECTS);
+       public Set<String> getProjects() {
+               return additionalInfo == null ? null : (Set<String>) 
additionalInfo.get(KEY_PROJECTS);
        }
 
-       public void setProjects(List<String> projects) {
+       public void setProjects(Set<String> projects) {
                if (projects == null) {
                        removeAdditionalInfo(KEY_PROJECTS);
                } else {
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngineImpl.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngineImpl.java
index 868122869..e268fff38 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngineImpl.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerPolicyEngineImpl.java
@@ -1154,8 +1154,8 @@ public class RangerPolicyEngineImpl implements 
RangerPolicyEngine {
                                result.setIsAudited(true);
                        }
 
-                       result.setDatasets(gdsResult.getDatasetNames());
-                       result.setProjects(gdsResult.getProjectNames());
+                       result.setDatasets(gdsResult.getDatasets());
+                       result.setProjects(gdsResult.getProjects());
                } else {
                        if (LOG.isDebugEnabled()) {
                                LOG.debug("updateFromGdsResult(): no 
GdsAccessResult found in request context({})", request);
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsAccessResult.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsAccessResult.java
index 2d0ec0379..b2158579f 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsAccessResult.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsAccessResult.java
@@ -22,75 +22,41 @@ package org.apache.ranger.plugin.policyengine.gds;
 import java.util.*;
 
 public class GdsAccessResult {
-    private Set<Long>    datasets;
-    private Set<Long>    projects;
-    private List<String> datasetNames;
-    private List<String> projectNames;
-    private boolean      isAllowed;
-    private boolean      isAudited;
-    private long         policyId = -1;
-    private Long         policyVersion;
+    private Set<String> datasets;
+    private Set<String> projects;
+    private boolean     isAllowed;
+    private boolean     isAudited;
+    private long        policyId = -1;
+    private Long        policyVersion;
 
 
     public GdsAccessResult() {
     }
 
-    public void addDataset(Long datasetId) {
+    public void addDataset(String name) {
         if (datasets == null) {
             datasets = new HashSet<>();
         }
 
-        datasets.add(datasetId);
+        datasets.add(name);
     }
 
-    public boolean hasDataset(Long datasetId) {
-        return datasets != null && datasets.contains(datasetId);
-    }
-
-    public Set<Long> getDatasets() {
+    public Set<String> getDatasets() {
         return datasets;
     }
 
-    public void addDatasetName(String name) {
-        if (datasetNames == null) {
-            datasetNames = datasets == null ? new ArrayList<>() : new 
ArrayList<>(datasets.size());
-        }
-
-        datasetNames.add(name);
-    }
-
-    public List<String> getDatasetNames() {
-        return datasetNames;
-    }
-
-    public void addProject(Long projectId) {
+    public void addProject(String name) {
         if (projects == null) {
             projects = new HashSet<>();
         }
 
-        projects.add(projectId);
+        projects.add(name);
     }
 
-    public boolean hasProject(Long projectId) {
-        return projects != null && projects.contains(projectId);
-    }
-
-    public Set<Long> getProjects() {
+    public Set<String> getProjects() {
         return projects;
     }
 
-    public void addProjectName(String name) {
-        if (projectNames == null) {
-            projectNames = projects == null ? new ArrayList<>() : new 
ArrayList<>(projects.size());
-        }
-
-        projectNames.add(name);
-    }
-
-    public List<String> getProjectNames() {
-        return projectNames;
-    }
-
     public boolean getIsAllowed() {
         return isAllowed;
     }
@@ -125,7 +91,7 @@ public class GdsAccessResult {
 
     @Override
     public int hashCode() {
-        return Objects.hash(datasets, projects, datasetNames, projectNames, 
isAllowed, isAudited, policyId, policyVersion);
+        return Objects.hash(datasets, projects, isAllowed, isAudited, 
policyId, policyVersion);
     }
 
     @Override
@@ -139,8 +105,6 @@ public class GdsAccessResult {
 
             return Objects.equals(datasets, other.datasets) &&
                    Objects.equals(projects, other.projects) &&
-                   Objects.equals(datasetNames, other.datasetNames) &&
-                   Objects.equals(projectNames, other.projectNames) &&
                    Objects.equals(isAllowed, other.isAllowed) &&
                    Objects.equals(isAudited, other.isAudited) &&
                    Objects.equals(policyId, other.policyId) &&
@@ -161,8 +125,6 @@ public class GdsAccessResult {
         sb.append("RangerGdsAccessResult={");
         sb.append("datasets={").append(datasets).append("}");
         sb.append(", projects={").append(projects).append("}");
-        sb.append(", datasetNames={").append(datasetNames).append("}");
-        sb.append(", projectNames={").append(projectNames).append("}");
         sb.append(", isAllowed={").append(isAllowed).append("}");
         sb.append(", isAudited={").append(isAudited).append("}");
         sb.append(", policyId={").append(policyId).append("}");
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsDataShareEvaluator.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsDataShareEvaluator.java
index 198907855..83ab59630 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsDataShareEvaluator.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsDataShareEvaluator.java
@@ -21,12 +21,11 @@ package org.apache.ranger.plugin.policyengine.gds;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.plugin.conditionevaluator.RangerConditionEvaluator;
-import org.apache.ranger.plugin.model.RangerServiceDef;
+import org.apache.ranger.plugin.model.RangerServiceDef.RangerResourceDef;
 import org.apache.ranger.plugin.model.validation.RangerServiceDefHelper;
 import org.apache.ranger.plugin.policyengine.RangerAccessRequest;
 import org.apache.ranger.plugin.policyengine.RangerResourceTrie;
 import org.apache.ranger.plugin.policyevaluator.RangerCustomConditionEvaluator;
-import org.apache.ranger.plugin.policyresourcematcher.RangerResourceEvaluator;
 import org.apache.ranger.plugin.util.RangerResourceEvaluatorsRetriever;
 import org.apache.ranger.plugin.util.ServiceGdsInfo.DataShareInfo;
 import org.apache.ranger.plugin.util.ServiceGdsInfo.SharedResourceInfo;
@@ -56,8 +55,8 @@ public class GdsDataShareEvaluator {
         this.conditionEvaluator = 
RangerCustomConditionEvaluator.getInstance().getExpressionEvaluator(dsh.getConditionExpr(),
 serviceDefHelper.getServiceDef());
 
         if (resources != null) {
-            Set<String>                   resourceKeys = new HashSet<>();
-            List<RangerResourceEvaluator> evaluators   = new 
ArrayList<>(resources.size());
+            Set<String>                      resourceKeys = new HashSet<>();
+            List<GdsSharedResourceEvaluator> evaluators   = new 
ArrayList<>(resources.size());
 
             for (SharedResourceInfo resource : resources) {
                 GdsSharedResourceEvaluator evaluator = new 
GdsSharedResourceEvaluator(resource, dsh.getDefaultAccessTypes(), 
serviceDefHelper);
@@ -68,8 +67,8 @@ public class GdsDataShareEvaluator {
             }
 
             for (String resourceKey : resourceKeys) {
-                RangerServiceDef.RangerResourceDef resourceDef  = 
serviceDefHelper.getResourceDef(resourceKey);
-                RangerResourceTrie                 resourceTrie = new 
RangerResourceTrie<>(resourceDef, evaluators);
+                RangerResourceDef                              resourceDef  = 
serviceDefHelper.getResourceDef(resourceKey);
+                RangerResourceTrie<GdsSharedResourceEvaluator> resourceTrie = 
new RangerResourceTrie<>(resourceDef, evaluators);
 
                 resourceTries.put(resourceKey, resourceTrie);
             }
@@ -94,7 +93,7 @@ public class GdsDataShareEvaluator {
         dsidEvaluators.add(dhidEvaluator);
     }
 
-    public void evaluate(RangerAccessRequest request, GdsAccessResult result) {
+    public void evaluate(RangerAccessRequest request, GdsAccessResult result, 
Set<Long> datasetIds) {
         LOG.debug("==> GdsDataShareEvaluator.evaluate({}, {})", request, 
result);
 
         Collection<GdsSharedResourceEvaluator> evaluators = 
RangerResourceEvaluatorsRetriever.getEvaluators(resourceTries, 
request.getResource().getAsMap(), request.getResourceElementMatchingScopes());
@@ -126,9 +125,9 @@ public class GdsDataShareEvaluator {
 
                 if (isAllowed) { // now find dsidEvaluators that allow the 
request and collect their datasetIds
                     for (GdsDshidEvaluator dsidEvaluator : dsidEvaluators) {
-                        if (!result.hasDataset(dsidEvaluator.getDatasetId())) {
+                        if 
(!datasetIds.contains(dsidEvaluator.getDatasetId())) {
                             if (dsidEvaluator.isAllowed(request)) {
-                                
result.addDataset(dsidEvaluator.getDatasetId());
+                                datasetIds.add(dsidEvaluator.getDatasetId());
                             }
                         }
                     }
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsDatasetEvaluator.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsDatasetEvaluator.java
index 1de430def..61047134b 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsDatasetEvaluator.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsDatasetEvaluator.java
@@ -29,10 +29,7 @@ import 
org.apache.ranger.plugin.util.ServiceGdsInfo.DatasetInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
+import java.util.*;
 
 public class GdsDatasetEvaluator {
     private static final Logger LOG = 
LoggerFactory.getLogger(GdsDatasetEvaluator.class);
@@ -41,6 +38,7 @@ public class GdsDatasetEvaluator {
 
 
     private final DatasetInfo                 dataset;
+    private final RangerServiceDef            gdsServiceDef;
     private final String                      name;
     private final List<GdsDipEvaluator>       dipEvaluators = new 
ArrayList<>();
     private final List<RangerPolicyEvaluator> policyEvaluators;
@@ -49,8 +47,9 @@ public class GdsDatasetEvaluator {
     public GdsDatasetEvaluator(DatasetInfo dataset, RangerServiceDef 
gdsServiceDef, RangerPolicyEngineOptions options) {
         LOG.debug("==> GdsDatasetEvaluator()");
 
-        this.dataset = dataset;
-        this.name    = StringUtils.isBlank(dataset.getName()) ? 
StringUtils.EMPTY : dataset.getName();
+        this.dataset       = dataset;
+        this.gdsServiceDef = gdsServiceDef;
+        this.name          = StringUtils.isBlank(dataset.getName()) ? 
StringUtils.EMPTY : dataset.getName();
 
         if (dataset.getPolicies() != null) {
             policyEvaluators = new ArrayList<>(dataset.getPolicies().size());
@@ -81,10 +80,10 @@ public class GdsDatasetEvaluator {
         dipEvaluators.add(dipEvaluator);
     }
 
-    public void evaluate(RangerAccessRequest request, GdsAccessResult result, 
RangerServiceDef gdsServiceDef) {
+    public void evaluate(RangerAccessRequest request, GdsAccessResult result, 
Set<Long> projectIds) {
         LOG.debug("==> GdsDatasetEvaluator.evaluate({}, {})", request, result);
 
-        result.addDatasetName(getName());
+        result.addDataset(getName());
 
         if (!policyEvaluators.isEmpty()) {
             GdsDatasetAccessRequest datasetRequest = new 
GdsDatasetAccessRequest(getId(), gdsServiceDef, request);
@@ -108,9 +107,9 @@ public class GdsDatasetEvaluator {
         }
 
         for (GdsDipEvaluator dipEvaluator : dipEvaluators) {
-            if (!result.hasProject(dipEvaluator.getProjectId())) {
+            if (!projectIds.contains(dipEvaluator.getProjectId())) {
                 if (dipEvaluator.isAllowed(request)) {
-                    result.addProject(dipEvaluator.getProjectId());
+                    projectIds.add(dipEvaluator.getProjectId());
                 }
             }
         }
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsPolicyEngine.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsPolicyEngine.java
index 64be44893..809bbfa96 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsPolicyEngine.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsPolicyEngine.java
@@ -19,7 +19,6 @@
 
 package org.apache.ranger.plugin.policyengine.gds;
 
-import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.ranger.plugin.model.RangerGds;
 import org.apache.ranger.plugin.model.RangerServiceDef;
@@ -65,7 +64,7 @@ public class GdsPolicyEngine {
     }
 
     public GdsAccessResult evaluate(RangerAccessRequest request) {
-        LOG.debug("==> RangerGdsPolicyEngine.evaluate({})", request);;
+        LOG.debug("==> RangerGdsPolicyEngine.evaluate({})", request);
 
         GdsAccessResult             ret        = null;
         List<GdsDataShareEvaluator> dataShares = 
getDataShareEvaluators(request);
@@ -77,12 +76,21 @@ public class GdsPolicyEngine {
                 dataShares.sort(GdsDataShareEvaluator.EVAL_ORDER_COMPARATOR);
             }
 
+            Set<Long> datasetIds = new HashSet<>();
+
             for (GdsDataShareEvaluator dshEvaluator : dataShares) {
-                dshEvaluator.evaluate(request, ret);
+                dshEvaluator.evaluate(request, ret, datasetIds);
             }
 
-            evaluateDatasetPolicies(ret.getDatasets(), request, ret);
-            evaluateProjectPolicies(ret.getProjects(), request, ret);
+            if (!datasetIds.isEmpty()) {
+                Set<Long> projectIds = new HashSet<>();
+
+                evaluateDatasetPolicies(datasetIds, request, ret, projectIds);
+
+                if (!projectIds.isEmpty()) {
+                    evaluateProjectPolicies(projectIds, request, ret);
+                }
+            }
         }
 
         LOG.debug("<== RangerGdsPolicyEngine.evaluate({}): {}", request, ret);
@@ -229,70 +237,76 @@ public class GdsPolicyEngine {
         return ret;
     }
 
-    private void evaluateDatasetPolicies(Set<Long> datasetIds, 
RangerAccessRequest request, GdsAccessResult result) {
-        if (CollectionUtils.isNotEmpty(datasetIds)) {
-            List<GdsDatasetEvaluator> evaluators = new 
ArrayList<>(datasetIds.size());
+    private void evaluateDatasetPolicies(Set<Long> datasetIds, 
RangerAccessRequest request, GdsAccessResult result, Set<Long> projectIds) {
+        List<GdsDatasetEvaluator> evaluators = new 
ArrayList<>(datasetIds.size());
 
-            for (Long datasetId : datasetIds) {
-                GdsDatasetEvaluator evaluator = datasets.get(datasetId);
+        for (Long datasetId : datasetIds) {
+            GdsDatasetEvaluator evaluator = datasets.get(datasetId);
 
-                if (evaluator == null) {
-                    LOG.error("evaluateDatasetPolicies(): invalid datasetId in 
result: {}. Ignored", datasetId);
+            if (evaluator == null) {
+                LOG.error("evaluateDatasetPolicies(): invalid datasetId in 
result: {}. Ignored", datasetId);
 
-                    continue;
-                }
-
-                evaluators.add(evaluator);
+                continue;
             }
 
-            if (evaluators.size() > 1) {
-                evaluators.sort(GdsDatasetEvaluator.EVAL_ORDER_COMPARATOR);
-            }
+            evaluators.add(evaluator);
+        }
 
+        if (evaluators.size() > 1) {
+            evaluators.sort(GdsDatasetEvaluator.EVAL_ORDER_COMPARATOR);
+        }
+
+        if (!evaluators.isEmpty()) {
             for (GdsDatasetEvaluator evaluator : evaluators) {
-                evaluator.evaluate(request, result, 
gdsInfo.getGdsServiceDef());
+                evaluator.evaluate(request, result, projectIds);
             }
         }
     }
 
     private void evaluateProjectPolicies(Set<Long> projectIds, 
RangerAccessRequest request, GdsAccessResult result) {
-        if (CollectionUtils.isNotEmpty(projectIds)) {
-            List<GdsProjectEvaluator> evaluators = new 
ArrayList<>(projectIds.size());
-
-            for (Long projectId : projectIds) {
-                GdsProjectEvaluator evaluator = projects.get(projectId);
+        List<GdsProjectEvaluator> evaluators = new 
ArrayList<>(projectIds.size());
 
-                if (evaluator == null) {
-                    LOG.error("evaluateProjectPolicies(): invalid projectId in 
result: {}. Ignored", projectId);
+        for (Long projectId : projectIds) {
+            GdsProjectEvaluator evaluator = projects.get(projectId);
 
-                    continue;
-                }
+            if (evaluator == null) {
+                LOG.error("evaluateProjectPolicies(): invalid projectId in 
result: {}. Ignored", projectId);
 
-                evaluators.add(evaluator);
+                continue;
             }
 
-            if (evaluators.size() > 1) {
-                evaluators.sort(GdsProjectEvaluator.EVAL_ORDER_COMPARATOR);
-            }
+            evaluators.add(evaluator);
+        }
 
-            for (GdsProjectEvaluator evaluator : evaluators) {
-                evaluator.evaluate(request, result, 
gdsInfo.getGdsServiceDef());
-            }
+        if (evaluators.size() > 1) {
+            evaluators.sort(GdsProjectEvaluator.EVAL_ORDER_COMPARATOR);
+        }
+
+        for (GdsProjectEvaluator evaluator : evaluators) {
+            evaluator.evaluate(request, result);
         }
     }
 }
 
 /*
-     sharedRes-1--\
-                   |-- dataShare-1-------  dataset-1--\
-     sharedRes-2--/                   /                \
-                                     /                  \_____ project-1
-     sharedRes-3------ dataShare-2---\                  /
-                                      \___ dataset-2---/
-                                         /
-     sharedRes-4------ dataShare-3------/
-
-     sharedRes-5------ dataShare-4-------- dataset-3 --------- project-2
-
-     sharedRes-6------ dataShare-5-------- dataset-4
+     dataShare-1 ----------------------- dataset-1 ---
+           resource-1                 /                \
+           resource-2                /                  \
+                                    /                    \
+     dataShare-2 -------------------|                    | ---- project-1
+           resource-3                \                  /
+                                      \                /
+                                       -- dataset-2---
+                                      /
+     dataShare-3 ---------------------
+           resource-3
+           resource-4
+
+     dataShare-4 ------------------------- dataset-3 --------- project-2
+           resource-4
+           resource-5
+
+     dataShare-5 ------------------------- dataset-4
+           resource-6
+           resource-7
  */
\ No newline at end of file
diff --git 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsProjectEvaluator.java
 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsProjectEvaluator.java
index d5ce0e904..446f2a90a 100644
--- 
a/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsProjectEvaluator.java
+++ 
b/agents-common/src/main/java/org/apache/ranger/plugin/policyengine/gds/GdsProjectEvaluator.java
@@ -40,14 +40,16 @@ public class GdsProjectEvaluator {
     public static final GdsProjectEvalOrderComparator EVAL_ORDER_COMPARATOR = 
new GdsProjectEvalOrderComparator();
 
     private final ProjectInfo                 project;
+    private final RangerServiceDef            gdsServiceDef;
     private final String                      name;
     private final List<RangerPolicyEvaluator> policyEvaluators;
 
     public GdsProjectEvaluator(ProjectInfo project, RangerServiceDef 
gdsServiceDef, RangerPolicyEngineOptions options) {
         LOG.debug("==> GdsProjectEvaluator({})", project);
 
-        this.project = project;
-        this.name    = StringUtils.isBlank(project.getName()) ? 
StringUtils.EMPTY : project.getName();
+        this.project       = project;
+        this.gdsServiceDef = gdsServiceDef;
+        this.name          = StringUtils.isBlank(project.getName()) ? 
StringUtils.EMPTY : project.getName();
 
         if (project.getPolicies() != null) {
             policyEvaluators = new ArrayList<>(project.getPolicies().size());
@@ -74,10 +76,10 @@ public class GdsProjectEvaluator {
         return name;
     }
 
-    public void evaluate(RangerAccessRequest request, GdsAccessResult result, 
RangerServiceDef gdsServiceDef) {
+    public void evaluate(RangerAccessRequest request, GdsAccessResult result) {
         LOG.debug("==> GdsDatasetEvaluator.evaluate({}, {})", request, result);
 
-        result.addProjectName(getName());
+        result.addProject(getName());
 
         if (!policyEvaluators.isEmpty()) {
             GdsProjectAccessRequest projectRequest = new 
GdsProjectAccessRequest(getId(), gdsServiceDef, request);
diff --git 
a/agents-common/src/test/resources/policyengine/gds/test_gds_policy_engine_hive.json
 
b/agents-common/src/test/resources/policyengine/gds/test_gds_policy_engine_hive.json
index c3ef3c484..010baed5c 100644
--- 
a/agents-common/src/test/resources/policyengine/gds/test_gds_policy_engine_hive.json
+++ 
b/agents-common/src/test/resources/policyengine/gds/test_gds_policy_engine_hive.json
@@ -192,7 +192,7 @@
         "resource":   { "elements": { "database": "sales", "table": 
"prospects" } },
         "accessType": "select", "user": "ds-user", "userGroups": []
       },
-      "result": { "datasets": [ 1 ], "projects": [ 1 ], "datasetNames": [ 
"dataset-1" ], "projectNames": [ "project-1" ], "isAllowed": true, "isAudited": 
true, "policyId": 2001 }
+      "result": { "datasets": [ "dataset-1" ], "projects": [ "project-1" ], 
"isAllowed": true, "isAudited": true, "policyId": 2001 }
     },
     {
       "name": "table: sales.orders, user: ds-user, access: select",
@@ -200,7 +200,7 @@
         "resource":   { "elements": { "database": "sales", "table": "orders" } 
},
         "accessType": "select", "user": "ds-user", "userGroups": []
       },
-      "result": { "datasets": [ 1 ], "projects": [ 1 ], "datasetNames": [ 
"dataset-1" ], "projectNames": [ "project-1" ], "isAllowed": true, "isAudited": 
true, "policyId": 2001 }
+      "result": { "datasets": [ "dataset-1" ], "projects": [ "project-1" ], 
"isAllowed": true, "isAudited": true, "policyId": 2001 }
     },
     {
       "name": "table: finance.invoices, user: ds-user, access: select",
@@ -208,7 +208,7 @@
         "resource":   { "elements": { "database": "finance", "table": 
"invoices" } },
         "accessType": "select", "user": "ds-user", "userGroups": []
       },
-      "result": { "datasets": [ 1, 2 ], "projects": [ 1 ], "datasetNames": [ 
"dataset-1", "dataset-2" ], "projectNames": [ "project-1" ], "isAllowed": true, 
"isAudited": true, "policyId": 2001 }
+      "result": { "datasets": [ "dataset-1", "dataset-2" ], "projects": [ 
"project-1" ], "isAllowed": true, "isAudited": true, "policyId": 2001 }
     },
     {
       "name": "table: finance.payments, user: ds-user, access: select",
@@ -216,7 +216,7 @@
         "resource":   { "elements": { "database": "finance", "table": 
"payments" } },
         "accessType": "select", "user": "ds-user", "userGroups": []
       },
-      "result": { "datasets": [ 1, 2 ], "projects": [ 1 ], "datasetNames": [ 
"dataset-1", "dataset-2" ], "projectNames": [ "project-1" ], "isAllowed": true, 
"isAudited": true, "policyId": 2001 }
+      "result": { "datasets": [ "dataset-1", "dataset-2" ], "projects": [ 
"project-1" ], "isAllowed": true, "isAudited": true, "policyId": 2001 }
     },
     {
       "name": "table: shipping.shipments, user: ds-user, access: select",
@@ -224,7 +224,7 @@
         "resource":   { "elements": { "database": "shipping", "table": 
"shipments" } },
         "accessType": "select", "user": "ds-user", "userGroups": []
       },
-      "result": { "datasets": [ 2 ], "projects": [ 1 ], "datasetNames": [ 
"dataset-2" ], "projectNames": [ "project-1" ], "isAllowed": true, "isAudited": 
true, "policyId": 2002 }
+      "result": { "datasets": [ "dataset-2" ], "projects": [ "project-1" ], 
"isAllowed": true, "isAudited": true, "policyId": 2002 }
     },
     {
       "name": "table: customers.contact_info, user: ds-user, access: select",
@@ -232,7 +232,7 @@
         "resource":   { "elements": { "database": "customers", "table": 
"contact_info" } },
         "accessType": "select", "user": "ds-user", "userGroups": []
       },
-      "result": { "datasets": [ 3 ], "projects": [ 2 ], "datasetNames": [ 
"dataset-3" ], "projectNames": [ "project-2" ], "isAllowed": true, "isAudited": 
true, "policyId": 2003 }
+      "result": { "datasets": [ "dataset-3" ], "projects": [ "project-2" ], 
"isAllowed": true, "isAudited": true, "policyId": 2003 }
     },
     {
       "name": "table: operations.facilities, user: ds-user, access: select",
@@ -240,7 +240,7 @@
         "resource":   { "elements": { "database": "operations", "table": 
"facilities" } },
         "accessType": "select", "user": "ds-user", "userGroups": []
       },
-      "result": { "datasets": [ 4 ], "projects": null, "datasetNames": [ 
"dataset-4" ], "projectNames": null, "isAllowed": true, "isAudited": true, 
"policyId": 2004 }
+      "result": { "datasets": [ "dataset-4" ], "projects": null, "isAllowed": 
true, "isAudited": true, "policyId": 2004 }
     },
 
 
@@ -250,7 +250,7 @@
         "resource":   { "elements": { "database": "sales", "table": 
"prospects" } },
         "accessType": "select", "user": "proj-user", "userGroups": []
       },
-      "result": { "datasets": [ 1 ], "projects": [ 1 ], "datasetNames": [ 
"dataset-1" ], "projectNames": [ "project-1" ], "isAllowed": true, "isAudited": 
true, "policyId": 3001 }
+      "result": { "datasets": [ "dataset-1" ], "projects": [ "project-1" ], 
"isAllowed": true, "isAudited": true, "policyId": 3001 }
     },
     {
       "name": "table: sales.orders, user: proj-user, access: select",
@@ -258,7 +258,7 @@
         "resource":   { "elements": { "database": "sales", "table": "orders" } 
},
         "accessType": "select", "user": "proj-user", "userGroups": []
       },
-      "result": { "datasets": [ 1 ], "projects": [ 1 ], "datasetNames": [ 
"dataset-1" ], "projectNames": [ "project-1" ], "isAllowed": true, "isAudited": 
true, "policyId": 3001 }
+      "result": { "datasets": [ "dataset-1" ], "projects": [ "project-1" ], 
"isAllowed": true, "isAudited": true, "policyId": 3001 }
     },
     {
       "name": "table: finance.invoices, user: proj-user, access: select",
@@ -266,7 +266,7 @@
         "resource":   { "elements": { "database": "finance", "table": 
"invoices" } },
         "accessType": "select", "user": "proj-user", "userGroups": []
       },
-      "result": { "datasets": [ 1, 2 ], "projects": [ 1 ], "datasetNames": [ 
"dataset-1", "dataset-2" ], "projectNames": [ "project-1" ], "isAllowed": true, 
"isAudited": true, "policyId": 3001 }
+      "result": { "datasets": [ "dataset-1", "dataset-2" ], "projects": [ 
"project-1" ], "isAllowed": true, "isAudited": true, "policyId": 3001 }
     },
     {
       "name": "table: finance.payments, user: proj-user, access: select",
@@ -274,7 +274,7 @@
         "resource":   { "elements": { "database": "finance", "table": 
"payments" } },
         "accessType": "select", "user": "proj-user", "userGroups": []
       },
-      "result": { "datasets": [ 1, 2 ], "projects": [ 1 ], "datasetNames": [ 
"dataset-1", "dataset-2" ], "projectNames": [ "project-1" ], "isAllowed": true, 
"isAudited": true, "policyId": 3001 }
+      "result": { "datasets": [ "dataset-1", "dataset-2" ], "projects": [ 
"project-1" ], "isAllowed": true, "isAudited": true, "policyId": 3001 }
     },
     {
       "name": "table: shipping.shipments, user: proj-user, access: select",
@@ -282,7 +282,7 @@
         "resource":   { "elements": { "database": "shipping", "table": 
"shipments" } },
         "accessType": "select", "user": "proj-user", "userGroups": []
       },
-      "result": { "datasets": [ 2 ], "projects": [ 1 ], "datasetNames": [ 
"dataset-2" ], "projectNames": [ "project-1" ], "isAllowed": true, "isAudited": 
true, "policyId": 3001 }
+      "result": { "datasets": [ "dataset-2" ], "projects": [ "project-1" ], 
"isAllowed": true, "isAudited": true, "policyId": 3001 }
     },
     {
       "name": "table: customers.contact_info, user: proj-user, access: select",
@@ -290,7 +290,7 @@
         "resource":   { "elements": { "database": "customers", "table": 
"contact_info" } },
         "accessType": "select", "user": "proj-user", "userGroups": []
       },
-      "result": { "datasets": [ 3 ], "projects": [ 2 ], "datasetNames": [ 
"dataset-3" ], "projectNames": [ "project-2" ], "isAllowed": true, "isAudited": 
true, "policyId": 3002 }
+      "result": { "datasets": [ "dataset-3" ], "projects": [ "project-2" ], 
"isAllowed": true, "isAudited": true, "policyId": 3002 }
     },
     {
       "name": "table: operations.facilities, user: proj-user, access: select",
@@ -298,7 +298,7 @@
         "resource":   { "elements": { "database": "operations", "table": 
"facilities" } },
         "accessType": "select", "user": "proj-user", "userGroups": []
       },
-      "result": { "datasets": [ 4 ], "projects": null, "datasetNames": [ 
"dataset-4" ], "projectNames": null, "isAllowed": false, "isAudited": true, 
"policyId": -1 }
+      "result": { "datasets": [ "dataset-4" ], "projects": null, "isAllowed": 
false, "isAudited": true, "policyId": -1 }
     },
 
 
@@ -308,7 +308,7 @@
         "resource":   { "elements": { "database": "sales", "table": 
"prospects" } },
         "accessType": "select", "user": "scott", "userGroups": []
       },
-      "result": { "datasets": [ 1 ], "projects": [ 1 ], "datasetNames": [ 
"dataset-1" ], "projectNames": [ "project-1" ], "isAllowed": false, 
"isAudited": true, "policyId": -1 }
+      "result": { "datasets": [ "dataset-1" ], "projects": [ "project-1" ], 
"isAllowed": false, "isAudited": true, "policyId": -1 }
     },
     {
       "name": "table: sales.orders, user: scott, access: select",
@@ -316,7 +316,7 @@
         "resource":   { "elements": { "database": "sales", "table": "orders" } 
},
         "accessType": "select", "user": "scott", "userGroups": []
       },
-      "result": { "datasets": [ 1 ], "projects": [ 1 ], "datasetNames": [ 
"dataset-1" ], "projectNames": [ "project-1" ], "isAllowed": false, 
"isAudited": true, "policyId": -1 }
+      "result": { "datasets": [ "dataset-1" ], "projects": [ "project-1" ], 
"isAllowed": false, "isAudited": true, "policyId": -1 }
     },
     {
       "name": "table: finance.invoices, user: scott, access: select",
@@ -324,7 +324,7 @@
         "resource":   { "elements": { "database": "finance", "table": 
"invoices" } },
         "accessType": "select", "user": "scott", "userGroups": []
       },
-      "result": { "datasets": [ 1, 2 ], "projects": [ 1 ], "datasetNames": [ 
"dataset-1", "dataset-2" ], "projectNames": [ "project-1" ], "isAllowed": 
false, "isAudited": true, "policyId": -1 }
+      "result": { "datasets": [ "dataset-1", "dataset-2" ], "projects": [ 
"project-1" ], "isAllowed": false, "isAudited": true, "policyId": -1 }
     },
     {
       "name": "table: finance.payments, user: scott, access: select",
@@ -332,7 +332,7 @@
         "resource":   { "elements": { "database": "finance", "table": 
"payments" } },
         "accessType": "select", "user": "scott", "userGroups": []
       },
-      "result": { "datasets": [ 1, 2 ], "projects": [ 1 ], "datasetNames": [ 
"dataset-1", "dataset-2" ], "projectNames": [ "project-1" ], "isAllowed": 
false, "isAudited": true, "policyId": -1 }
+      "result": { "datasets": [ "dataset-1", "dataset-2" ], "projects": [ 
"project-1" ], "isAllowed": false, "isAudited": true, "policyId": -1 }
     },
     {
       "name": "table: shipping.shipments, user: scott, access: select",
@@ -340,7 +340,7 @@
         "resource":   { "elements": { "database": "shipping", "table": 
"shipments" } },
         "accessType": "select", "user": "scott", "userGroups": []
       },
-      "result": { "datasets": [ 2 ], "projects": [ 1 ], "datasetNames": [ 
"dataset-2" ], "projectNames": [ "project-1" ], "isAllowed": false, 
"isAudited": true, "policyId": -1 }
+      "result": { "datasets": [ "dataset-2" ], "projects": [ "project-1" ], 
"isAllowed": false, "isAudited": true, "policyId": -1 }
     },
     {
       "name": "table: customers.contact_info, user: scott, access: select",
@@ -348,7 +348,7 @@
         "resource":   { "elements": { "database": "customers", "table": 
"contact_info" } },
         "accessType": "select", "user": "scott", "userGroups": []
       },
-      "result": { "datasets": [ 3 ], "projects": [ 2 ], "datasetNames": [ 
"dataset-3" ], "projectNames": [ "project-2" ], "isAllowed": false, 
"isAudited": true, "policyId": -1 }
+      "result": { "datasets": [ "dataset-3" ], "projects": [ "project-2" ], 
"isAllowed": false, "isAudited": true, "policyId": -1 }
     },
     {
       "name": "table: operations.facilities, user: scott, access: select",
@@ -356,7 +356,7 @@
         "resource":   { "elements": { "database": "operations", "table": 
"facilities" } },
         "accessType": "select", "user": "scott", "userGroups": []
       },
-      "result": { "datasets": [ 4 ], "projects": null, "datasetNames": [ 
"dataset-4" ], "projectNames": null, "isAllowed": false, "isAudited": true, 
"policyId": -1 }
+      "result": { "datasets": [ "dataset-4" ], "projects": null, "isAllowed": 
false, "isAudited": true, "policyId": -1 }
     },
     
 
@@ -366,7 +366,7 @@
         "resource":   { "elements": { "database": "operations", "table": 
"facilities" } },
         "accessType": "select", "user": "scott", "userGroups": []
       },
-      "result": { "datasets": [ 4 ], "projects": null, "datasetNames": [ 
"dataset-4" ], "projectNames": null, "isAllowed": false, "isAudited": true, 
"policyId": -1 }
+      "result": { "datasets": [ "dataset-4" ], "projects": null, "isAllowed": 
false, "isAudited": true, "policyId": -1 }
     },
 
     {
@@ -375,7 +375,7 @@
         "resource":   { "elements": { "database": "operations", "table": 
"facilities" } },
         "accessType": "update", "user": "ds-user", "userGroups": []
       },
-      "result": { "datasets": null, "projects": null, "datasetNames": null, 
"projectNames": null, "isAllowed": false, "isAudited": false, "policyId": -1 }
+      "result": { "datasets": null, "projects": null, "isAllowed": false, 
"isAudited": false, "policyId": -1 }
     }
   ]
 }


Reply via email to