From 816b480df3c8d7bb1bb60a016ac7e0cf2eeb68b6 Mon Sep 17 00:00:00 2001 From: Rikin Kachhia Date: Wed, 8 Aug 2018 11:41:00 +0530 Subject: [PATCH] handle legacy operators in permissions builder (fix #268) (#270) --- .../PermissionBuilder/PermissionBuilder.js | 39 ++++++++++++------- .../PermissionBuilder/utils.js | 18 +++++++++ .../Data/TablePermissions/Permissions.js | 13 ++++++- console/src/components/Services/Data/utils.js | 5 +++ 4 files changed, 61 insertions(+), 14 deletions(-) diff --git a/console/src/components/Services/Data/TablePermissions/PermissionBuilder/PermissionBuilder.js b/console/src/components/Services/Data/TablePermissions/PermissionBuilder/PermissionBuilder.js index ef26e8d465c..7b3dbf4f2e4 100644 --- a/console/src/components/Services/Data/TablePermissions/PermissionBuilder/PermissionBuilder.js +++ b/console/src/components/Services/Data/TablePermissions/PermissionBuilder/PermissionBuilder.js @@ -52,6 +52,22 @@ class PermissionBuilder extends React.Component { return _tableSchemas; }; + const isNotOperator = value => { + return value === boolOperators.not; + }; + + const isAndOrOperator = value => { + return value === boolOperators.or || value === boolOperators.and; + }; + + const isArrayColumnOperator = value => { + return arrayColumnOperators.indexOf(value) !== -1; + }; + + const isColumnOperator = value => { + return columnOperators.indexOf(value) !== -1; + }; + const getFilter = (conditions, prefix, value = '') => { const _where = {}; @@ -59,7 +75,7 @@ class PermissionBuilder extends React.Component { const operation = prefixSplit[0]; if (prefixSplit.length !== 1) { - if (operation === boolOperators.or || operation === boolOperators.and) { + if (isAndOrOperator(operation)) { const position = parseInt(prefixSplit[1], 10); _where[operation] = conditions[operation]; _where[operation][position] = getFilter( @@ -70,13 +86,13 @@ class PermissionBuilder extends React.Component { if (Object.keys(_where[operation][position]).length === 0) { _where[operation].splice(position, 1); } - } else if (operation === boolOperators.not) { + } else if (isNotOperator(operation)) { _where[operation] = getFilter( conditions[operation], prefixSplit.slice(1).join('.'), value ); - } else if (arrayColumnOperators.indexOf(operation) !== -1) { + } else if (isArrayColumnOperator(operation)) { const position = parseInt(prefixSplit[1], 10); _where[operation] = conditions[operation] || []; if (value) { @@ -95,16 +111,13 @@ class PermissionBuilder extends React.Component { } else { if (operation === '--') { // blank where - } else if ( - operation === boolOperators.or || - operation === boolOperators.and - ) { + } else if (isAndOrOperator(operation)) { _where[operation] = []; - } else if (operation === boolOperators.not) { + } else if (isNotOperator(operation)) { _where[operation] = {}; - } else if (arrayColumnOperators.indexOf(operation) !== -1) { + } else if (isArrayColumnOperator(operation)) { _where[operation] = value || []; - } else if (columnOperators.indexOf(operation) !== -1) { + } else if (isColumnOperator(operation)) { _where[operation] = value; // if (operation === '$eq') { // _where = value @@ -261,7 +274,7 @@ class PermissionBuilder extends React.Component { let valueInput = ''; if (operator) { - if (arrayColumnOperators.indexOf(operator) !== -1) { + if (isArrayColumnOperator(operator)) { valueInput = renderInputArray( dispatchFunc, operationValue, @@ -402,7 +415,7 @@ class PermissionBuilder extends React.Component { let boolExpValue = null; if (operation) { const newPrefix = addToPrefix(prefix, operation); - if (operation === boolOperators.or || operation === boolOperators.and) { + if (isAndOrOperator(operation)) { boolExpValue = renderBoolExpArray( dispatchFunc, condition[operation], @@ -410,7 +423,7 @@ class PermissionBuilder extends React.Component { tableSchemas, newPrefix ); - } else if (operation === boolOperators.not) { + } else if (isNotOperator(operation)) { boolExpValue = renderBoolExp( dispatchFunc, condition[operation], diff --git a/console/src/components/Services/Data/TablePermissions/PermissionBuilder/utils.js b/console/src/components/Services/Data/TablePermissions/PermissionBuilder/utils.js index 7f0f1c38e69..deeb413ac1c 100644 --- a/console/src/components/Services/Data/TablePermissions/PermissionBuilder/utils.js +++ b/console/src/components/Services/Data/TablePermissions/PermissionBuilder/utils.js @@ -21,6 +21,24 @@ export const columnOperators = [ export const arrayColumnOperators = ['_in', '_nin']; +export const legacyOperatorsMap = { + $and: '_and', + $or: '_or', + $not: '_not', + $eq: '_eq', + $ne: '_ne', + $in: '_in', + $nin: '_nin', + $gt: '_gt', + $lt: '_lt', + $gte: '_gte', + $lte: '_lte', + $like: '_like', + $nlike: '_nlike', + $similar: '_similar', + $nsimilar: '_nsimilar', +}; + export function addToPrefix(prefix, value) { let _newPrefix; if (prefix !== null && prefix.toString()) { diff --git a/console/src/components/Services/Data/TablePermissions/Permissions.js b/console/src/components/Services/Data/TablePermissions/Permissions.js index 9ca21babd6f..6f0d0c0670c 100644 --- a/console/src/components/Services/Data/TablePermissions/Permissions.js +++ b/console/src/components/Services/Data/TablePermissions/Permissions.js @@ -28,7 +28,8 @@ import PermissionBuilder from './PermissionBuilder/PermissionBuilder'; import TableHeader from '../TableCommon/TableHeader'; import ViewHeader from '../TableBrowseRows/ViewHeader'; import { setTable } from '../DataActions'; -import { getIngForm } from '../utils'; +import { getIngForm, escapeRegExp } from '../utils'; +import { legacyOperatorsMap } from './PermissionBuilder/utils'; class Permissions extends Component { componentDidMount() { @@ -670,6 +671,16 @@ class Permissions extends Component { filterString = JSON.stringify(permsState[query][filterKey]); } + // replace legacy operator values + Object.keys(legacyOperatorsMap).forEach(legacyOperator => { + const legacyString = '"' + legacyOperator + '"'; + const currentString = '"' + legacyOperatorsMap[legacyOperator] + '"'; + filterString = filterString.replace( + new RegExp(escapeRegExp(legacyString), 'g'), + currentString + ); + }); + return (
Allow {getIngForm(permsState.query)} rows for role ' diff --git a/console/src/components/Services/Data/utils.js b/console/src/components/Services/Data/utils.js index a0dd21fcfd8..e27a01d686d 100644 --- a/console/src/components/Services/Data/utils.js +++ b/console/src/components/Services/Data/utils.js @@ -118,10 +118,15 @@ const getEdForm = string => { ); }; +const escapeRegExp = string => { + return string.replace(/([.*+?^${}()|[\]\\])/g, '\\$1'); +}; + export { ordinalColSort, findTableFromRel, findAllFromRel, getEdForm, getIngForm, + escapeRegExp, };