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

dineshkumar 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 2f1b005a1 RANGER-4392: Tag based policy with boolean expression is not 
working
2f1b005a1 is described below

commit 2f1b005a1f304906ccd5a10aa15d04babe1524d8
Author: Mugdha Varadkar <[email protected]>
AuthorDate: Tue Aug 29 20:43:19 2023 +0530

    RANGER-4392: Tag based policy with boolean expression is not working
    
    Signed-off-by: Dineshkumar Yadav <[email protected]>
---
 .../react-webapp/src/components/Editable.jsx       |  8 +-
 .../views/PolicyListing/AddUpdatePolicyForm.jsx    | 94 +++++++++++++++-------
 .../views/PolicyListing/PolicyConditionsComp.jsx   | 12 +--
 3 files changed, 73 insertions(+), 41 deletions(-)

diff --git 
a/security-admin/src/main/webapp/react-webapp/src/components/Editable.jsx 
b/security-admin/src/main/webapp/react-webapp/src/components/Editable.jsx
index 75f7fcff1..4e98134ab 100644
--- a/security-admin/src/main/webapp/react-webapp/src/components/Editable.jsx
+++ b/security-admin/src/main/webapp/react-webapp/src/components/Editable.jsx
@@ -301,13 +301,7 @@ const CustomCondition = (props) => {
                     <CreatableSelect
                       {...selectProps}
                       defaultValue={
-                        selectedInputVal == ""
-                          ? null
-                          : !isArray(selectedInputVal)
-                          ? selectedInputVal
-                              ?.split(", ")
-                              .map((obj) => ({ label: obj, value: obj }))
-                          : selectedInputVal
+                        selectedInputVal == "" ? null : selectedInputVal
                       }
                       onChange={(e) => handleChange(e, m.name)}
                       placeholder="enter expression"
diff --git 
a/security-admin/src/main/webapp/react-webapp/src/views/PolicyListing/AddUpdatePolicyForm.jsx
 
b/security-admin/src/main/webapp/react-webapp/src/views/PolicyListing/AddUpdatePolicyForm.jsx
index 51df2e378..688831ea5 100644
--- 
a/security-admin/src/main/webapp/react-webapp/src/views/PolicyListing/AddUpdatePolicyForm.jsx
+++ 
b/security-admin/src/main/webapp/react-webapp/src/views/PolicyListing/AddUpdatePolicyForm.jsx
@@ -305,7 +305,8 @@ export default function AddUpdatePolicyForm(props) {
             policyData?.policyItems,
             serviceCompData?.accessTypes,
             null,
-            serviceCompData?.name
+            serviceCompData?.name,
+            serviceCompData
           )
         : [{}];
     data.allowExceptions =
@@ -314,7 +315,8 @@ export default function AddUpdatePolicyForm(props) {
             policyData?.allowExceptions,
             serviceCompData?.accessTypes,
             null,
-            serviceCompData?.name
+            serviceCompData?.name,
+            serviceCompData
           )
         : [{}];
     data.denyPolicyItems =
@@ -323,7 +325,8 @@ export default function AddUpdatePolicyForm(props) {
             policyData?.denyPolicyItems,
             serviceCompData?.accessTypes,
             null,
-            serviceCompData?.name
+            serviceCompData?.name,
+            serviceCompData
           )
         : [{}];
     data.denyExceptions =
@@ -332,7 +335,8 @@ export default function AddUpdatePolicyForm(props) {
             policyData.denyExceptions,
             serviceCompData?.accessTypes,
             null,
-            serviceCompData?.name
+            serviceCompData?.name,
+            serviceCompData
           )
         : [{}];
     data.dataMaskPolicyItems =
@@ -341,7 +345,8 @@ export default function AddUpdatePolicyForm(props) {
             policyData.dataMaskPolicyItems,
             serviceCompData?.dataMaskDef?.accessTypes,
             serviceCompData?.dataMaskDef?.maskTypes,
-            serviceCompData?.name
+            serviceCompData?.name,
+            serviceCompData
           )
         : [{}];
     data.rowFilterPolicyItems =
@@ -350,7 +355,8 @@ export default function AddUpdatePolicyForm(props) {
             policyData.rowFilterPolicyItems,
             serviceCompData?.rowFilterDef?.accessTypes,
             null,
-            serviceCompData?.name
+            serviceCompData?.name,
+            serviceCompData
           )
         : [{}];
     if (policyId) {
@@ -433,8 +439,23 @@ export default function AddUpdatePolicyForm(props) {
       /* Policy condition */
       if (policyData?.conditions?.length > 0) {
         data.conditions = {};
+
         for (let val of policyData.conditions) {
-          data.conditions[val?.type] = val?.values?.join(",");
+          let conditionObj = find(
+            policyConditionUpdatedJSON(serviceCompData?.policyConditions),
+            function (m) {
+              if (m.name == val.type) {
+                return m;
+              }
+            }
+          );
+
+          if (!isEmpty(conditionObj.uiHint)) {
+            data.conditions[val?.type] = JSON.parse(conditionObj.uiHint)
+              .isMultiValue
+              ? val?.values
+              : val?.values.toString();
+          }
         }
       }
     }
@@ -498,11 +519,11 @@ export default function AddUpdatePolicyForm(props) {
             ([conditionKey, conditionValue]) => {
               return obj.conditions.push({
                 type: conditionKey,
-                values: !isArray(conditionValue)
-                  ? conditionValue?.split(",")
-                  : conditionValue.map((m) => {
+                values: isArray(conditionValue)
+                  ? conditionValue.map((m) => {
                       return m.value;
                     })
+                  : [conditionValue]
               });
             }
           );
@@ -527,7 +548,13 @@ export default function AddUpdatePolicyForm(props) {
     return policyResourceItem;
   };
 
-  const setPolicyItemVal = (formData, accessTypes, maskTypes, serviceType) => {
+  const setPolicyItemVal = (
+    formData,
+    accessTypes,
+    maskTypes,
+    serviceType,
+    serviceData
+  ) => {
     return formData.map((val) => {
       let obj = {},
         accessTypesObj = [];
@@ -603,13 +630,32 @@ export default function AddUpdatePolicyForm(props) {
           obj.dataMaskInfo.valueExpr = val.dataMaskInfo.valueExpr;
         }
       }
-      /* Policy Condition*/
+
+      /* Policy Condition */
       if (val?.conditions?.length > 0) {
         obj.conditions = {};
+
         for (let data of val.conditions) {
-          obj.conditions[data.type] = data.values.join(", ");
+          let conditionObj = find(
+            policyConditionUpdatedJSON(serviceData?.policyConditions),
+            function (m) {
+              if (m.name == data.type) {
+                return m;
+              }
+            }
+          );
+
+          if (!isEmpty(conditionObj.uiHint)) {
+            obj.conditions[data?.type] = JSON.parse(conditionObj.uiHint)
+              .isMultiValue
+              ? data?.values.map((m) => {
+                  return { value: m, label: m };
+                })
+              : data?.values.toString();
+          }
         }
       }
+
       return obj;
     });
   };
@@ -717,7 +763,7 @@ export default function AddUpdatePolicyForm(props) {
       Object.entries(values.conditions).map(([key, value]) => {
         return data.conditions.push({
           type: key,
-          values: value?.split(",")
+          values: isArray(value) ? value : [value]
         });
       });
     } else {
@@ -1359,25 +1405,17 @@ export default function AddUpdatePolicyForm(props) {
                                             <tr key={keyName}>
                                               <td>
                                                 <center>
-                                                  {" "}
-                                                  {conditionObj.label}{" "}
+                                                  {conditionObj.label}
                                                 </center>
                                               </td>
                                               <td>
-                                                {isObject(
-                                                  values.conditions[keyName]
+                                                {isArray(
+                                                  values?.conditions[keyName]
                                                 ) ? (
                                                   <center>
-                                                    {values.conditions[keyName]
-                                                      .length > 1
-                                                      ? values.conditions[
-                                                          keyName
-                                                        ].map((m) => {
-                                                          return ` ${m.label} 
`;
-                                                        })
-                                                      : values.conditions[
-                                                          keyName
-                                                        ].label}
+                                                    {values.conditions[
+                                                      keyName
+                                                    ].join(", ")}
                                                   </center>
                                                 ) : (
                                                   <center>
diff --git 
a/security-admin/src/main/webapp/react-webapp/src/views/PolicyListing/PolicyConditionsComp.jsx
 
b/security-admin/src/main/webapp/react-webapp/src/views/PolicyListing/PolicyConditionsComp.jsx
index 32d802809..47240bce6 100644
--- 
a/security-admin/src/main/webapp/react-webapp/src/views/PolicyListing/PolicyConditionsComp.jsx
+++ 
b/security-admin/src/main/webapp/react-webapp/src/views/PolicyListing/PolicyConditionsComp.jsx
@@ -22,7 +22,7 @@ import { Col, Form as FormB, Row, Modal, Button } from 
"react-bootstrap";
 import { Form, Field } from "react-final-form";
 import Select from "react-select";
 import CreatableSelect from "react-select/creatable";
-import { find } from "lodash";
+import { find, isEmpty } from "lodash";
 import { InfoIcon } from "../../utils/XAUtils";
 import { RegexMessage } from "../../utils/XAMessages";
 const esprima = require("esprima");
@@ -79,17 +79,17 @@ export default function PolicyConditionsComp(props) {
   };
 
   const handleChange = (val, input) => {
-    let value = null;
+    let value = [];
     if (val) {
-      value = val.map((m) => m.value).join(",");
+      value = val.map((m) => m.value);
     }
     input.onChange(value);
   };
 
   const ipRangeVal = (val) => {
-    let value = null;
-    if (val) {
-      value = val.split(",").map((m) => ({ label: m, value: m }));
+    let value = [];
+    if (!isEmpty(val)) {
+      value = val.map((m) => ({ label: m, value: m }));
     }
     return value;
   };

Reply via email to