You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ma...@apache.org on 2015/10/01 23:34:24 UTC

incubator-ranger git commit: RANGER-670 : Policy UI to support input of a single value for resources

Repository: incubator-ranger
Updated Branches:
  refs/heads/tag-policy a9b153d3a -> 89b7ba227


RANGER-670 : Policy UI to support input of a single value for resources

Signed-off-by: Madhan Neethiraj <ma...@apache.org>


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/tag-policy
Commit: 89b7ba227ae27f3c78ce86e4e4b268beaeba22a0
Parents: a9b153d
Author: Gautam Borad <gb...@gmail.com>
Authored: Thu Oct 1 17:02:26 2015 +0530
Committer: Madhan Neethiraj <ma...@apache.org>
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);
 					}