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;
};