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 edcb9732f RANGER-4443: enable datashare-in-dataset to be created in 
granted/active state
edcb9732f is described below

commit edcb9732f8d991194c6badc0fa9bc7a40ed98a1c
Author: Madhan Neethiraj <[email protected]>
AuthorDate: Sun Oct 8 21:53:28 2023 -0700

    RANGER-4443: enable datashare-in-dataset to be created in granted/active 
state
---
 .../ranger/validation/RangerGdsValidator.java      | 52 +++++++++++++++++++---
 1 file changed, 46 insertions(+), 6 deletions(-)

diff --git 
a/security-admin/src/main/java/org/apache/ranger/validation/RangerGdsValidator.java
 
b/security-admin/src/main/java/org/apache/ranger/validation/RangerGdsValidator.java
index 95ef62cfa..03e04e794 100755
--- 
a/security-admin/src/main/java/org/apache/ranger/validation/RangerGdsValidator.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/validation/RangerGdsValidator.java
@@ -318,14 +318,27 @@ public class RangerGdsValidator {
             result.addValidationFailure(new 
ValidationFailureDetails(ValidationErrorCode.GDS_VALIDATION_ERR_DATASET_ID_NOT_FOUND,
 "datasetId", dshInDataset.getDatasetId()));
         }
 
-        if (dataShare != null) {
+        if (dataShare != null && dataset != null) {
             if (!dataProvider.isAdminUser() && 
!dataProvider.isServiceAdmin(dataShare.getService()) && 
!dataProvider.isZoneAdmin(dataShare.getZone())) {
                 validateAdmin(dataProvider.getCurrentUserLoginId(), 
"datashare", dataShare.getName(), dataShare.getAcl(), result);
             }
-        }
 
-        if (dshInDataset.getStatus() != RangerGds.GdsShareStatus.NONE && 
dshInDataset.getStatus() != RangerGds.GdsShareStatus.REQUESTED) {
-            result.addValidationFailure(new 
ValidationFailureDetails(ValidationErrorCode.GDS_VALIDATION_ERR_ADD_DATA_SHARE_IN_DATASET_INVALID_STATUS,
 "status", dshInDataset.getStatus()));
+            switch (dshInDataset.getStatus()) {
+                case GRANTED:
+                case DENIED:
+                    validateAdmin(dataProvider.getCurrentUserLoginId(), 
"datashare", dataShare.getName(), dataShare.getAcl(), result);
+                break;
+
+                case ACTIVE:
+                    validateAdmin(dataProvider.getCurrentUserLoginId(), 
"datashare", dataShare.getName(), dataShare.getAcl(), result);
+                    validateAdmin(dataProvider.getCurrentUserLoginId(), 
"dataset", dataset.getName(), dataset.getAcl(), result);
+                break;
+
+                case NONE:
+                case REQUESTED:
+                default:
+                break;
+            }
         }
 
         if (!result.isSuccess()) {
@@ -460,9 +473,36 @@ public class RangerGdsValidator {
     public void validateCreate(RangerDatasetInProject dsInProject) {
         LOG.debug("==> validateCreate(dsInProject={})", dsInProject);
 
-        ValidationResult result = new ValidationResult();
+        ValidationResult result  = new ValidationResult();
+        RangerDataset    dataset = 
dataProvider.getDataset(dsInProject.getDatasetId());
+        RangerProject    project = 
dataProvider.getProject(dsInProject.getProjectId());
 
-        // TODO:
+        if (dataset == null) {
+            result.addValidationFailure(new 
ValidationFailureDetails(ValidationErrorCode.GDS_VALIDATION_ERR_DATASET_ID_NOT_FOUND,
 "datasetId", dsInProject.getDatasetId()));
+        }
+
+        if (project == null) {
+            result.addValidationFailure(new 
ValidationFailureDetails(ValidationErrorCode.GDS_VALIDATION_ERR_PROJECT_ID_NOT_FOUND,
 "project", dsInProject.getProjectId()));
+        }
+
+        if (dataset != null && project != null) {
+            switch (dsInProject.getStatus()) {
+                case GRANTED:
+                case DENIED:
+                    validateAdmin(dataProvider.getCurrentUserLoginId(), 
"dataset", dataset.getName(), dataset.getAcl(), result);
+                break;
+
+                case ACTIVE:
+                    validateAdmin(dataProvider.getCurrentUserLoginId(), 
"dataset", dataset.getName(), dataset.getAcl(), result);
+                    validateAdmin(dataProvider.getCurrentUserLoginId(), 
"project", project.getName(), project.getAcl(), result);
+                break;
+
+                case NONE:
+                case REQUESTED:
+                default:
+                break;
+            }
+        }
 
         if (!result.isSuccess()) {
             result.throwRESTException();

Reply via email to