mneethiraj commented on code in PR #1214:
URL: https://github.com/apache/ranger/pull/1214#discussion_r3953407133


##########
security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java:
##########
@@ -1908,6 +1931,157 @@ private <T> PList<T> getPList(List<T> list, int 
startIndex, int maxEntries, Stri
         return new PList<>(subList, startIndex, maxEntries, list.size(), 
subList.size(), sortType, sortBy);
     }
 
+    private void enforceViewOnSharedResource(RangerSharedResource 
sharedResource) {
+        if (!bizUtil.isAuditAdmin()) {

Review Comment:
   Shouldn't admin users be allowed as well?
   
   ```
   if (!bizUtil.isAdmin() && !bizUtil.isAuditAdmin()) {
   ```



##########
security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java:
##########
@@ -1908,6 +1931,157 @@ private <T> PList<T> getPList(List<T> list, int 
startIndex, int maxEntries, Stri
         return new PList<>(subList, startIndex, maxEntries, list.size(), 
subList.size(), sortType, sortBy);
     }
 
+    private void enforceViewOnSharedResource(RangerSharedResource 
sharedResource) {
+        if (!bizUtil.isAuditAdmin()) {
+            RangerDataShare dataShare = 
getCachedDataShare(sharedResource.getDataShareId(), new HashMap<>());
+
+            if (dataShare == null || !hasViewPermission(dataShare.getAcl())) {
+                throw 
restErrorUtil.create403RESTException(NOT_AUTHORIZED_TO_VIEW_SHARED_RESOURCE);
+            }
+        }
+    }
+
+    private boolean hasViewOnDataShare(Long dataShareId, Map<Long, 
RangerDataShare> dataShareCache) {
+        boolean         ret       = bizUtil.isAuditAdmin();
+        RangerDataShare dataShare = null;
+
+        if (!ret) {
+            dataShare = getCachedDataShare(dataShareId, dataShareCache);
+
+            if (dataShare != null) {
+                ret = hasViewPermission(dataShare.getAcl());
+            }
+        }
+
+        return ret;
+    }
+
+    private boolean hasViewOnDataShareInDataset(RangerDataShareInDataset 
dataShareInDataset, Map<Long, RangerDataShare> dataShareCache, Map<Long, 
RangerDataset> datasetCache) {
+        boolean ret = hasViewOnDataShare(dataShareInDataset.getDataShareId(), 
dataShareCache);
+
+        if (!ret) {
+            ret = hasViewOnDataset(dataShareInDataset.getDatasetId(), 
datasetCache);
+        }
+
+        return ret;
+    }
+
+    private boolean hasViewOnDatasetInProject(RangerDatasetInProject 
datasetInProject, Map<Long, RangerDataset> datasetCache, Map<Long, 
RangerProject> projectCache) {
+        boolean ret = hasViewOnDataset(datasetInProject.getDatasetId(), 
datasetCache);
+
+        if (!ret) {
+            ret = hasViewOnProject(datasetInProject.getProjectId(), 
projectCache);
+        }
+
+        return ret;
+    }
+
+    private boolean hasViewOnDataset(Long datasetId, Map<Long, RangerDataset> 
datasetCache) {
+        boolean       ret     = bizUtil.isAuditAdmin();
+        RangerDataset dataset = null;
+
+        if (!ret) {
+            dataset = getCachedDataset(datasetId, datasetCache);
+
+            if (dataset != null) {
+                ret = hasViewPermission(dataset.getAcl());
+            }
+        }
+
+        return ret;
+    }
+
+    private boolean hasViewOnProject(Long projectId, Map<Long, RangerProject> 
projectCache) {
+        boolean       ret     = bizUtil.isAuditAdmin();
+        RangerProject project = null;
+
+        if (!ret) {
+            project = getCachedProject(projectId, projectCache);
+
+            if (project != null) {
+                ret = hasViewPermission(project.getAcl());
+            }
+        }
+
+        return ret;
+    }
+
+    private boolean hasViewPermission(RangerGdsObjectACL acl) {
+        boolean ret = bizUtil.isAuditAdmin();

Review Comment:
   Shouldn't admin users be allowed as well?
   
   ```
   boolean ret = bizUtil.isAdmin() || bizUtil.isAuditAdmin();
   ```



##########
security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java:
##########
@@ -1908,6 +1931,157 @@ private <T> PList<T> getPList(List<T> list, int 
startIndex, int maxEntries, Stri
         return new PList<>(subList, startIndex, maxEntries, list.size(), 
subList.size(), sortType, sortBy);
     }
 
+    private void enforceViewOnSharedResource(RangerSharedResource 
sharedResource) {
+        if (!bizUtil.isAuditAdmin()) {
+            RangerDataShare dataShare = 
getCachedDataShare(sharedResource.getDataShareId(), new HashMap<>());
+
+            if (dataShare == null || !hasViewPermission(dataShare.getAcl())) {
+                throw 
restErrorUtil.create403RESTException(NOT_AUTHORIZED_TO_VIEW_SHARED_RESOURCE);
+            }
+        }
+    }
+
+    private boolean hasViewOnDataShare(Long dataShareId, Map<Long, 
RangerDataShare> dataShareCache) {
+        boolean         ret       = bizUtil.isAuditAdmin();
+        RangerDataShare dataShare = null;
+
+        if (!ret) {
+            dataShare = getCachedDataShare(dataShareId, dataShareCache);
+
+            if (dataShare != null) {
+                ret = hasViewPermission(dataShare.getAcl());
+            }
+        }
+
+        return ret;
+    }
+
+    private boolean hasViewOnDataShareInDataset(RangerDataShareInDataset 
dataShareInDataset, Map<Long, RangerDataShare> dataShareCache, Map<Long, 
RangerDataset> datasetCache) {
+        boolean ret = hasViewOnDataShare(dataShareInDataset.getDataShareId(), 
dataShareCache);
+
+        if (!ret) {
+            ret = hasViewOnDataset(dataShareInDataset.getDatasetId(), 
datasetCache);
+        }
+
+        return ret;
+    }
+
+    private boolean hasViewOnDatasetInProject(RangerDatasetInProject 
datasetInProject, Map<Long, RangerDataset> datasetCache, Map<Long, 
RangerProject> projectCache) {
+        boolean ret = hasViewOnDataset(datasetInProject.getDatasetId(), 
datasetCache);
+
+        if (!ret) {
+            ret = hasViewOnProject(datasetInProject.getProjectId(), 
projectCache);
+        }
+
+        return ret;
+    }
+
+    private boolean hasViewOnDataset(Long datasetId, Map<Long, RangerDataset> 
datasetCache) {
+        boolean       ret     = bizUtil.isAuditAdmin();
+        RangerDataset dataset = null;
+
+        if (!ret) {
+            dataset = getCachedDataset(datasetId, datasetCache);
+
+            if (dataset != null) {
+                ret = hasViewPermission(dataset.getAcl());
+            }
+        }
+
+        return ret;
+    }
+
+    private boolean hasViewOnProject(Long projectId, Map<Long, RangerProject> 
projectCache) {
+        boolean       ret     = bizUtil.isAuditAdmin();

Review Comment:
   Shouldn't admin users be allowed as well?
   
   ```
   boolean ret = bizUtil.isAdmin() || bizUtil.isAuditAdmin();
   ```



##########
security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java:
##########
@@ -1908,6 +1931,157 @@ private <T> PList<T> getPList(List<T> list, int 
startIndex, int maxEntries, Stri
         return new PList<>(subList, startIndex, maxEntries, list.size(), 
subList.size(), sortType, sortBy);
     }
 
+    private void enforceViewOnSharedResource(RangerSharedResource 
sharedResource) {
+        if (!bizUtil.isAuditAdmin()) {
+            RangerDataShare dataShare = 
getCachedDataShare(sharedResource.getDataShareId(), new HashMap<>());
+
+            if (dataShare == null || !hasViewPermission(dataShare.getAcl())) {
+                throw 
restErrorUtil.create403RESTException(NOT_AUTHORIZED_TO_VIEW_SHARED_RESOURCE);
+            }
+        }
+    }
+
+    private boolean hasViewOnDataShare(Long dataShareId, Map<Long, 
RangerDataShare> dataShareCache) {
+        boolean         ret       = bizUtil.isAuditAdmin();

Review Comment:
   Shouldn't admin users be allowed as well?
   
   ```
   boolean ret = bizUtil.isAdmin() || bizUtil.isAuditAdmin();
   ```



##########
security-admin/src/main/java/org/apache/ranger/biz/GdsDBStore.java:
##########
@@ -1908,6 +1931,157 @@ private <T> PList<T> getPList(List<T> list, int 
startIndex, int maxEntries, Stri
         return new PList<>(subList, startIndex, maxEntries, list.size(), 
subList.size(), sortType, sortBy);
     }
 
+    private void enforceViewOnSharedResource(RangerSharedResource 
sharedResource) {
+        if (!bizUtil.isAuditAdmin()) {
+            RangerDataShare dataShare = 
getCachedDataShare(sharedResource.getDataShareId(), new HashMap<>());
+
+            if (dataShare == null || !hasViewPermission(dataShare.getAcl())) {
+                throw 
restErrorUtil.create403RESTException(NOT_AUTHORIZED_TO_VIEW_SHARED_RESOURCE);
+            }
+        }
+    }
+
+    private boolean hasViewOnDataShare(Long dataShareId, Map<Long, 
RangerDataShare> dataShareCache) {
+        boolean         ret       = bizUtil.isAuditAdmin();
+        RangerDataShare dataShare = null;
+
+        if (!ret) {
+            dataShare = getCachedDataShare(dataShareId, dataShareCache);
+
+            if (dataShare != null) {
+                ret = hasViewPermission(dataShare.getAcl());
+            }
+        }
+
+        return ret;
+    }
+
+    private boolean hasViewOnDataShareInDataset(RangerDataShareInDataset 
dataShareInDataset, Map<Long, RangerDataShare> dataShareCache, Map<Long, 
RangerDataset> datasetCache) {
+        boolean ret = hasViewOnDataShare(dataShareInDataset.getDataShareId(), 
dataShareCache);
+
+        if (!ret) {
+            ret = hasViewOnDataset(dataShareInDataset.getDatasetId(), 
datasetCache);
+        }
+
+        return ret;
+    }
+
+    private boolean hasViewOnDatasetInProject(RangerDatasetInProject 
datasetInProject, Map<Long, RangerDataset> datasetCache, Map<Long, 
RangerProject> projectCache) {
+        boolean ret = hasViewOnDataset(datasetInProject.getDatasetId(), 
datasetCache);
+
+        if (!ret) {
+            ret = hasViewOnProject(datasetInProject.getProjectId(), 
projectCache);
+        }
+
+        return ret;
+    }
+
+    private boolean hasViewOnDataset(Long datasetId, Map<Long, RangerDataset> 
datasetCache) {
+        boolean       ret     = bizUtil.isAuditAdmin();

Review Comment:
   Shouldn't admin users be allowed as well?
   
   ```
   boolean ret = bizUtil.isAdmin() || bizUtil.isAuditAdmin();
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to