RANGER-670 : Policy UI to support input of a single value for resources Signed-off-by: Madhan Neethiraj <[email protected]>
Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/89b7ba22 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/89b7ba22 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/89b7ba22 Branch: refs/heads/master Commit: 89b7ba227ae27f3c78ce86e4e4b268beaeba22a0 Parents: a9b153d Author: Gautam Borad <[email protected]> Authored: Thu Oct 1 17:02:26 2015 +0530 Committer: Madhan Neethiraj <[email protected]> Committed: Thu Oct 1 14:15:11 2015 -0700 ---------------------------------------------------------------------- .../service-defs/ranger-servicedef-tag.json | 2 +- .../scripts/models/BackboneFormDataType.js | 67 ++++++++++---------- .../src/main/webapp/scripts/utils/XAUtils.js | 10 +++ .../scripts/views/policies/RangerPolicyForm.js | 32 +++++++--- 4 files changed, 69 insertions(+), 42 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/89b7ba22/agents-common/src/main/resources/service-defs/ranger-servicedef-tag.json ---------------------------------------------------------------------- diff --git a/agents-common/src/main/resources/service-defs/ranger-servicedef-tag.json b/agents-common/src/main/resources/service-defs/ranger-servicedef-tag.json index 30d1b20..bb9b98d 100644 --- a/agents-common/src/main/resources/service-defs/ranger-servicedef-tag.json +++ b/agents-common/src/main/resources/service-defs/ranger-servicedef-tag.json @@ -25,7 +25,7 @@ "matcherOptions": { "wildCard":false, "ignoreCase":false }, "validationRegEx":"", "validationMessage": "", - "uiHint":"", + "uiHint":"{ \"singleValue\":true }", "label": "TAG", "description": "TAG" } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/89b7ba22/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js b/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js index 6f410cf..a776f69 100644 --- a/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js +++ b/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js @@ -21,6 +21,7 @@ define(function(require) { 'use strict'; var Backbone = require('backbone'); + var XAUtils = require('utils/XAUtils'); var FormDataType = Backbone.Model.extend({ type : [ 'string', 'boolean', 'int' ], @@ -54,40 +55,42 @@ define(function(require) { if($.inArray(v.level, samelevelFieldCreated) >= 0){ return; } - if(v.excludesSupported || v.recursiveSupported || v.lookupSupported){ - var resourceOpts = {}; - formObj.type = 'Resource'; - formObj['excludeSupport']= v.excludesSupported; - formObj['recursiveSupport'] = v.recursiveSupported; - formObj.name = v.name; + if(! XAUtils.isSinglevValueInput(v) ){ + if(v.excludesSupported || v.recursiveSupported || v.lookupSupported ){ + var resourceOpts = {}; + formObj.type = 'Resource'; + formObj['excludeSupport']= v.excludesSupported; + formObj['recursiveSupport'] = v.recursiveSupported; + formObj.name = v.name; // formObj.level = v.level; - //checkParentHideShow field - formObj.fieldAttrs = { 'data-name' : 'field-'+v.name, 'parent' : v.parent }; - formObj['resourceOpts'] = {'data-placeholder': v.label }; - - if(!_.isUndefined(v.lookupSupported) && v.lookupSupported ){ - var opts = { - 'type' : v.name, - 'lookupURL' : "service/plugins/services/lookupResource/"+form.rangerService.get('name') - }; - if(_.has(v, 'validationRegEx') && !_.isEmpty(v.validationRegEx)){ - opts['regExpValidation'] = {'type': 'regexp', 'regexp':new RegExp(v.validationRegEx), 'message' : v.validationMessage}; + //checkParentHideShow field + formObj.fieldAttrs = { 'data-name' : 'field-'+v.name, 'parent' : v.parent }; + formObj['resourceOpts'] = {'data-placeholder': v.label }; + + if(!_.isUndefined(v.lookupSupported) && v.lookupSupported ){ + var opts = { + 'type' : v.name, + 'lookupURL' : "service/plugins/services/lookupResource/"+form.rangerService.get('name') + }; + if(_.has(v, 'validationRegEx') && !_.isEmpty(v.validationRegEx)){ + opts['regExpValidation'] = {'type': 'regexp', 'regexp':new RegExp(v.validationRegEx), 'message' : v.validationMessage}; + } + resourceOpts['select2Opts'] = form.getPlugginAttr(true, opts); + formObj['resourceOpts'] = resourceOpts; + } + //same level resources check + var optionsAttrs = _.filter(config,function(field){ if(field.level == v.level) return field;}) + if(optionsAttrs.length > 1){ + var optionsTitle = _.map(optionsAttrs,function(field){ return field.name;}); + formObj['sameLevelOpts'] = optionsTitle; + samelevelFieldCreated.push(v.level); + fieldName = 'sameLevel'+v.level; + formObj['title'] = ''; + formObj['resourcesAtSameLevel'] = true; + + // formView is used to listen form events + formObj['formView'] = form; } - resourceOpts['select2Opts'] = form.getPlugginAttr(true, opts); - formObj['resourceOpts'] = resourceOpts; - } - //same level resources check - var optionsAttrs = _.filter(config,function(field){ if(field.level == v.level) return field;}) - if(optionsAttrs.length > 1){ - var optionsTitle = _.map(optionsAttrs,function(field){ return field.name;}); - formObj['sameLevelOpts'] = optionsTitle; - samelevelFieldCreated.push(v.level); - fieldName = 'sameLevel'+v.level; - formObj['title'] = ''; - formObj['resourcesAtSameLevel'] = true; - - // formView is used to listen form events - formObj['formView'] = form; } }else{ formObj.type = 'Text'; http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/89b7ba22/security-admin/src/main/webapp/scripts/utils/XAUtils.js ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/scripts/utils/XAUtils.js b/security-admin/src/main/webapp/scripts/utils/XAUtils.js index 4265e1e..8cb90e3 100644 --- a/security-admin/src/main/webapp/scripts/utils/XAUtils.js +++ b/security-admin/src/main/webapp/scripts/utils/XAUtils.js @@ -1128,6 +1128,16 @@ define(function(require) { return XAUtils.notifyError('Error', erroMsg); }); }; + XAUtils.isSinglevValueInput = function(obj){ + //single value support + var singleValue = false; + if(!_.isUndefined(obj.uiHint) && !_.isEmpty(obj.uiHint)){ + var UIHint = JSON.parse(obj.uiHint); + if(!_.isUndefined(UIHint.singleValue)) + singleValue = UIHint.singleValue; + } + return singleValue; + }; return XAUtils; }); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/89b7ba22/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js index 5ef56f8..f32ffbc 100644 --- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js +++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js @@ -182,7 +182,13 @@ define(function(require){ //parentShowHide this.selectedResourceTypes['sameLevel'+resourceDef.level]=key; }else{ - this.model.set(resourceDef.name, obj) + //single value support + if(! XAUtil.isSinglevValueInput(resourceDef) ){ + this.model.set(resourceDef.name, obj) + }else{ + //single value resource + this.model.set(resourceDef.name, obj.values) + } } },this) } @@ -305,15 +311,23 @@ define(function(require){ _.each(this.rangerServiceDefModel.get('resources'),function(obj){ if(!_.isNull(obj)){ var tmpObj = that.model.get(obj.name); - if(!_.isUndefined(tmpObj) && _.isObject(tmpObj)){ - var rPolicyResource = new RangerPolicyResource(); - rPolicyResource.set('values',tmpObj.resource.split(',')); - if(!_.isUndefined(tmpObj.isRecursive)){ - rPolicyResource.set('isRecursive', tmpObj.isRecursive) - } - if(!_.isUndefined(tmpObj.isExcludes)){ - rPolicyResource.set('isExcludes', tmpObj.isExcludes) + var rPolicyResource = new RangerPolicyResource(); + //single value support + if(! XAUtil.isSinglevValueInput(obj) ){ + if(!_.isUndefined(tmpObj) && _.isObject(tmpObj)){ + rPolicyResource.set('values',tmpObj.resource.split(',')); + if(!_.isUndefined(tmpObj.isRecursive)){ + rPolicyResource.set('isRecursive', tmpObj.isRecursive) + } + if(!_.isUndefined(tmpObj.isExcludes)){ + rPolicyResource.set('isExcludes', tmpObj.isExcludes) + } + resources[obj.name] = rPolicyResource; + that.model.unset(obj.name); } + }else{ + //For single value resource + rPolicyResource.set('values',tmpObj.split(',')); resources[obj.name] = rPolicyResource; that.model.unset(obj.name); }
