You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by me...@apache.org on 2018/06/04 14:10:48 UTC

ranger git commit: RANGER-2119: Ranger UI: resource field issue when we set lookupSupported attribute to false in ranger-service-def.

Repository: ranger
Updated Branches:
  refs/heads/master 987abe806 -> 32d73afd6


RANGER-2119: Ranger UI: resource field issue when we set lookupSupported attribute to false in ranger-service-def.

Signed-off-by: Mehul Parikh <me...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/ranger/commit/32d73afd
Tree: http://git-wip-us.apache.org/repos/asf/ranger/tree/32d73afd
Diff: http://git-wip-us.apache.org/repos/asf/ranger/diff/32d73afd

Branch: refs/heads/master
Commit: 32d73afd6bc5ac5d9b894f3d14f3eaf9b1b4f408
Parents: 987abe8
Author: ni3galave <ni...@gmail.com>
Authored: Mon Jun 4 18:20:25 2018 +0530
Committer: Mehul Parikh <me...@apache.org>
Committed: Mon Jun 4 19:40:29 2018 +0530

----------------------------------------------------------------------
 .../scripts/models/BackboneFormDataType.js      |  37 +++--
 .../main/webapp/scripts/modules/XAOverrides.js  |  29 +++-
 .../src/main/webapp/scripts/utils/XAUtils.js    |  41 ++++++
 .../scripts/views/policies/RangerPolicyForm.js  | 138 +++++++++----------
 4 files changed, 157 insertions(+), 88 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ranger/blob/32d73afd/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 a928470..1329eb2 100644
--- a/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js
+++ b/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js
@@ -103,20 +103,25 @@ define(function(require) {
 								//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(!_.isUndefined(v.lookupSupported)){
+                                                                        var opts = {};
 									if(_.has(v, 'validationRegEx') && !_.isEmpty(v.validationRegEx)){
-										opts['regExpValidation'] = {'type': 'regexp', 'regexp':new RegExp(v.validationRegEx), 'message' : v.validationMessage};
+                                        opts['regExpValidation'] = {'type': 'regexp', 'regexp':new RegExp(v.validationRegEx), 'message' : v.validationMessage};
+                                    }
+                                    //To support single value input
+                                    if( XAUtils.isSinglevValueInput(v) ){
+                                        opts['singleValueInput'] = true;
+                                    }
+                                    opts['type'] = v.name;
+                                    if(v.lookupSupported){
+                                        opts['lookupURL'] = "service/plugins/services/lookupResource/"+form.rangerService.get('name');
+                                        resourceOpts['select2Opts'] = form.getPlugginAttr(true, opts);
+                                    }else{
+                                        resourceOpts['select2Opts'] = XAUtils.select2OptionForUserCreateChoice();
+                                        if(!_.isUndefined(opts.singleValueInput) && opts.singleValueInput){
+                                            resourceOpts['select2Opts']['maximumSelectionSize'] = 1;
+                                        }
 									}
-									//To support single value input
-									if( XAUtils.isSinglevValueInput(v) ){
-										opts['singleValueInput'] = true;
-									}	
-									resourceOpts['select2Opts'] = form.getPlugginAttr(true, opts);
 									formObj['resourceOpts'] = resourceOpts; 
 								}
 								//same level resources check
@@ -187,11 +192,13 @@ define(function(require) {
 							formObj['name'] = v.name;
 							formObj['editorAttrs'] = {'data-placeholder': v.label };
                                                         formObj.fieldAttrs = { 'data-name' : 'field-'+v.name, 'parent' : v.parent };
-							if(!_.isUndefined(v.lookupSupported) && v.lookupSupported ){
+                                                        if(!_.isUndefined(v.lookupSupported)){
 								var options = {
 										'containerCssClass' : v.name,
-										'lookupURL' : "service/plugins/services/lookupResource/"+form.rangerService.get('name')
-										};
+                                                                };
+                                                                if(v.lookupSupported){
+                                                                    options['lookupURL'] = "service/plugins/services/lookupResource/"+form.rangerService.get('name');
+                                                                }
 								//to support regexp level validation
 								if(_.has(v, 'validationRegEx') && !_.isEmpty(v.validationRegEx)){
 									options['regExpValidation'] = {'type': 'regexp', 'regexp':new RegExp(v.validationRegEx), 'message' : v.validationMessage};

http://git-wip-us.apache.org/repos/asf/ranger/blob/32d73afd/security-admin/src/main/webapp/scripts/modules/XAOverrides.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/modules/XAOverrides.js b/security-admin/src/main/webapp/scripts/modules/XAOverrides.js
index ecce373..3832916 100644
--- a/security-admin/src/main/webapp/scripts/modules/XAOverrides.js
+++ b/security-admin/src/main/webapp/scripts/modules/XAOverrides.js
@@ -520,7 +520,7 @@
 		  	this.renderSameLevelResource();
 		    return this;
 		  },
-		  renderResource : function() {
+                  renderResource : function(def) {
 			  var that = this;
                           var Vent = require('modules/Vent');
 			  if(!_.isNull(this.value) && !_.isEmpty(this.value)){
@@ -539,6 +539,28 @@
 //			  			that.checkDirtyFieldForSelect2($(e.currentTarget), that, this.value);
 			  		}
 			  	});
+                //Handle resource at same level option for lookupSupport true/false condition
+                if(def){
+                    if(def.lookupSupported){
+                        var opts = {};
+                        var singleValueInput = XAUtil.isSinglevValueInput(def);
+                        opts['singleValueInput'] = singleValueInput;
+                        if(_.has(def, 'validationRegEx') && !_.isEmpty(def.validationRegEx)){
+                            opts['regExpValidation'] = {'type': 'regexp', 'regexp':new RegExp(def.validationRegEx), 'message' : def.validationMessage};
+                        }
+                        opts['lookupURL'] = "service/plugins/services/lookupResource/"+this.form.rangerService.get('name');
+                        opts['type'] = def.name;
+                        this.resourceOpts['select2Opts'] = that.form.getPlugginAttr(true, opts);
+                    }else{
+                        this.resourceOpts.select2Opts['containerCssClass'] = def.name;
+                        delete this.resourceOpts.select2Opts['ajax'];
+                        delete this.resourceOpts.select2Opts['tags'];
+                        this.resourceOpts.select2Opts['data'] = [];
+                        if(singleValueInput){
+                            this.resourceOpts['select2Opts']['maximumSelectionSize'] = 1;
+                        }
+		    }
+                }
 			  	//create select2 if select2Opts is specified
 			    if(!_.isUndefined(this.resourceOpts.select2Opts)){
 			    	this.$resource.select2(this.resourceOpts.select2Opts).on('change',function(e){
@@ -607,7 +629,8 @@
 		  					var val = _.isEmpty(that.preserveResourceValues[e.currentTarget.value]) ? '' : that.preserveResourceValues[e.currentTarget.value].split(','); 
 		  					that.$resource.select2('val', val)
 		  				}else{
-		  					that.$resource.select2('val', '')
+							that.$resource.select2('val', "");
+							that.value=[];
 		  				}
 			  			//reset values
 			  			that.value.isExcludes = false;
@@ -639,6 +662,8 @@
                             if(that.recursiveSupport) that.value.isRecursive = true;
                             that.excludeSupport = def.excludesSupported;
                             that.renderToggles();
+                            //Handle resource at same level option for lookupSupport true/false condition
+                            that.renderResource(def);
                         }
                         //trigger resource event for showing respective access permissions
                         Vent.trigger('resourceType:change', changeType = 'resourceType', e.currentTarget.value, e.currentTarget.value, e);

http://git-wip-us.apache.org/repos/asf/ranger/blob/32d73afd/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 5bec224..d9366a1 100644
--- a/security-admin/src/main/webapp/scripts/utils/XAUtils.js
+++ b/security-admin/src/main/webapp/scripts/utils/XAUtils.js
@@ -1425,5 +1425,46 @@ define(function(require) {
         $('.popover').remove();
         $('.datetimepicker').remove();
     };
+    //select2 option
+    XAUtils.select2OptionForUserCreateChoice = function(){
+        var opts = {
+                multiple: true,
+                data:[],
+                closeOnSelect : true,
+                width :'220px',
+                allowClear: true,
+                tokenSeparators: ["," , " "],
+                minimumInputLength: 1,
+                initSelection : function (element, callback) {
+                    var data = [];
+                    //to set single select value
+                    if(!_.isUndefined(opts.singleValueInput) && opts.singleValueInput){
+                        callback({ id : element.val(), text : element.val() });
+                        return;
+                    }
+                    //this is form multi-select value
+                    $(element.val().split(",")).each(function () {
+                        data.push({id: this, text: this});
+                    });
+                    callback(data);
+                },
+                createSearchChoice: function(term, data) {
+                    term = _.escape(term);
+                    if ($(data).filter(function() {
+                        return this.text.localeCompare(term) === 0;
+                    }).length === 0) {
+                        if($.inArray(term, this.val()) >= 0){
+                            return null;
+                        }else{
+                            return {
+                                id : term,
+                                text: term
+                            };
+                        }
+                    }
+                },
+            }
+        return opts;
+    }
 	return XAUtils;
 });
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ranger/blob/32d73afd/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 e431f0a..e3d9635 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
@@ -560,77 +560,73 @@ define(function(require){
 			function extractLast( term ) {
 				return split( term ).pop();
 			}
-
-			this.fields[that.pathFieldName].editor.$el.find('[data-js="resource"]').tagit({
-				autocomplete : {
-					cache: false,
-					source: function( request, response ) {
-						var url = "service/plugins/services/lookupResource/"+that.rangerService.get('name');
-						var context ={
-							'userInput' : extractLast( request.term ),
-							'resourceName' : that.pathFieldName,
-							'resources' : {}
-						};
-						var val = that.fields[that.pathFieldName].editor.getValue();
-						context.resources[that.pathFieldName] = _.isNull(val) || _.isEmpty(val) ? [] : val.resource.split(","); 
-						var p = $.ajax({
-							url : url,
-							type : "POST",
-							data : JSON.stringify(context),
-							dataType : 'json',
-							contentType: "application/json; charset=utf-8",
-						}).done(function(data){
-							if(data){
-								response(data);
-							} else {
-								response();
-							}
-
-                                                }).fail(function(){
-							response();
-
-						});
-						setTimeout(function(){ 
-							p.abort();
-							console.log('connection timeout for resource path request...!!');
-						}, 10000);
-					},
-					open : function(){
-						$(this).removeClass('working');
-					},
-					search: function() {
-						if(!_.isUndefined(this.value) && _.contains(this.value,',')){ 
-							_.each(this.value.split(',') , function(tag){
-								that.fields[that.pathFieldName].editor.$el.tagit("createTag", tag);
-							});
-				        	return false;
-				        }	
-						var term = extractLast( this.value );
-						$(this).addClass('working');
-						if ( term.length < 1 ) {
-							return false;
-						}
-					},
-					
-				},
-				beforeTagAdded: function(event, ui) {
-			        // do something special
-					that.fields[that.pathFieldName].$el.removeClass('error');
-		        	that.fields[that.pathFieldName].$el.find('.help-inline').html('');
-					var tags =  [];
-			        console.log(ui.tag);
-			        if(!_.isUndefined(options.regExpValidation) && !options.regExpValidation.regexp.test(ui.tagLabel)){
-			        	that.fields[that.pathFieldName].$el.addClass('error');
-			        	that.fields[that.pathFieldName].$el.find('.help-inline').html(options.regExpValidation.message);
-			        	return false;
-			        }
-				}
-			}).on('change',function(e){
-				//check dirty field for tagit input type : `path`
-				XAUtil.checkDirtyField($(e.currentTarget).val(), defaultValue.toString(), $(e.currentTarget))
-			});
-	
-			
+                        var tagitOpts = {}
+                        if(!_.isUndefined(options.lookupURL) && options.lookupURL){
+                            tagitOpts["autocomplete"] = {
+                            cache: false,
+                    source: function( request, response ) {
+                        var url = "service/plugins/services/lookupResource/"+that.rangerService.get('name');
+                        var context ={
+                            'userInput' : extractLast( request.term ),
+                            'resourceName' : that.pathFieldName,
+                            'resources' : {}
+                        };
+                        var val = that.fields[that.pathFieldName].editor.getValue();
+                        context.resources[that.pathFieldName] = _.isNull(val) || _.isEmpty(val) ? [] : val.resource.split(",");
+                        var p = $.ajax({
+                            url : url,
+                            type : "POST",
+                            data : JSON.stringify(context),
+                            dataType : 'json',
+                            contentType: "application/json; charset=utf-8",
+                        }).done(function(data){
+                            if(data){
+                                response(data);
+                            } else {
+                                response();
+                            }
+                        }).fail(function(){
+                            response();
+                        });
+                        setTimeout(function(){
+                            p.abort();
+                            console.log('connection timeout for resource path request...!!');
+                        }, 10000);
+                    },
+                    open : function(){
+                        $(this).removeClass('working');
+                    },
+                    search: function() {
+                        if(!_.isUndefined(this.value) && _.contains(this.value,',')){
+                            _.each(this.value.split(',') , function(tag){
+                                that.fields[that.pathFieldName].editor.$el.tagit("createTag", tag);
+                            });
+                            return false;
+                        }
+                        var term = extractLast( this.value );
+                        $(this).addClass('working');
+                        if ( term.length < 1 ) {
+                            return false;
+                        }
+                    },
+                            }
+                        }
+                        tagitOpts['beforeTagAdded'] = function(event, ui) {
+                // do something special
+                that.fields[that.pathFieldName].$el.removeClass('error');
+                that.fields[that.pathFieldName].$el.find('.help-inline').html('');
+                var tags =  [];
+                console.log(ui.tag);
+                if(!_.isUndefined(options.regExpValidation) && !options.regExpValidation.regexp.test(ui.tagLabel)){
+                    that.fields[that.pathFieldName].$el.addClass('error');
+                    that.fields[that.pathFieldName].$el.find('.help-inline').html(options.regExpValidation.message);
+                    return false;
+                }
+            }
+            this.fields[that.pathFieldName].editor.$el.find('[data-js="resource"]').tagit(tagitOpts).on('change', function(e){
+                //check dirty field for tagit input type : `path`
+                XAUtil.checkDirtyField($(e.currentTarget).val(), defaultValue.toString(), $(e.currentTarget));
+            });
 		},
 		getPlugginAttr :function(autocomplete, options){
 			var that =this, type = options.containerCssClass, validRegExpString = true, select2Opts=[];