Repository: incubator-ranger Updated Branches: refs/heads/stack 31db54702 -> 0d7f8dea8
RANGER-203: Added support to resources at same level Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/0d7f8dea Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/0d7f8dea Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/0d7f8dea Branch: refs/heads/stack Commit: 0d7f8dea8a507c602d860e39d6d94738bbbc3a54 Parents: 31db547 Author: Gautam Borad <[email protected]> Authored: Tue Jan 20 09:06:32 2015 -0800 Committer: Madhan Neethiraj <[email protected]> Committed: Tue Jan 20 09:06:32 2015 -0800 ---------------------------------------------------------------------- .../scripts/models/BackboneFormDataType.js | 11 +- .../scripts/views/policies/RangerPolicyForm.js | 151 ++++++++++++++++++- .../views/policies/RangerPolicyTableLayout.js | 5 +- security-admin/src/main/webapp/styles/xa.css | 3 + .../policies/RangerPolicyForm_tmpl.html | 21 +++ .../policies/RangerPolicyTableLayout_tmpl.html | 2 +- 6 files changed, 183 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0d7f8dea/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 b8c8bb2..b5792fb 100644 --- a/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js +++ b/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js @@ -33,8 +33,17 @@ define(function(require) { case 'string': if(!_.isUndefined(v.lookupSupported) && v.lookupSupported ){ formObj.type = 'Select2Remote'; - formObj.pluginAttr = _.isUndefined(v.url) ? form.getPlugginAttr(false) : form.getPlugginAttr(true, v.url), + if(_.isUndefined(v.url)){ + var options = {'containerCssClass' : v.name }; + formObj.pluginAttr = form.getPlugginAttr(false, options); + }else{ + var options = {'url' : v.url , 'containerCssClass' : v.name }; + formObj.pluginAttr = form.getPlugginAttr(true, options); + } formObj.editorAttrs = {'data-placeholder': v.label }, + // + formObj.level = v.level; + formObj.name = v.name; formObj.options = function(callback, editor){ callback(); }, http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0d7f8dea/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 532ed67..d668c6f 100644 --- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js +++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js @@ -49,6 +49,10 @@ define(function(require){ { _viewName : 'RangerPolicyForm', + templateData : function() { + + return this.getTemplateData(); + }, /** * intialize a new RangerPolicyForm Form View * @constructs @@ -76,6 +80,10 @@ define(function(require){ this.on('resourceStatus:change', function(form, fieldEditor){ this.evResourceStatusChange(form, fieldEditor); }); + + /*this.on('sameLevelType:change', function(form, fieldEditor){ + this.evResourceTypeChange(form, fieldEditor); + });*/ }, /** fields for the form @@ -91,14 +99,96 @@ define(function(require){ var formDataType = new BackboneFormDataType(); attrs = formDataType.getFormElements(this.rangerServiceDefModel.get('resources'),this.rangerServiceDefModel.get('enums'), attrs, this); + attrs = this.setSameLevelField(attrs, schemaNames); + var attr1 = _.pick(_.result(this.model,'schemaBase'), 'name','isEnabled'); var attr2 = _.pick(_.result(this.model,'schemaBase'),schemaNames); return _.extend(attr1,_.extend(attrs,attr2)); }, + setSameLevelField : function(attrs, schemaNames) { + var level = [],sameLevel = [],that = this; + this.sameLevelType = [],this.selectOptions = {}; + this.sameLevelFound = false; + //Get array of all levels like [1,2,2,3,4,4,4,5,6] + _.each(attrs, function(obj){ level.push(obj.level) }) + + /* count levels + counts = { 1 : 1, 2 : 2, 3 : 1, 4: 3, 5 : 1, 6 : 1} + */ + var counts = {}; + level.forEach(function(x) { counts[x] = (counts[x] || 0)+1; }); + //create level counter array which has more than one same level + _.each(counts, function(cnt,l) { + if(cnt > 1){ + sameLevel.push(l); + this.sameLevelFound = true; + } + }, this); + + if(this.sameLevelFound){ + this.schemaBase = ['name','isEnabled']; + this.schemaBase1 = schemaNames; + var editorsAttr = [], fieldAttrs = []; + //iterate over same level array + _.each(sameLevel, function(lev, i) { + //get same level resources + var OptionsAttrs = _.filter(attrs,function(field){ if(field.level == lev) return field;}) + var optionsTitle = _.map(OptionsAttrs,function(field){ return field.name;}); + + //cretae selectType for same level resource + attrs['sameLevelType'+lev] = { + type : 'Select', + options : optionsTitle, + editorAttrs : {'class':'btn dropdown-toggle','style': 'width: 100px;height: 29px;font-family: Tahoma;font-size: 14px;border-radius: 10px;border: 2px #cccccc solid;'} + }; + //hide all select options + _.each(optionsTitle, function(field,i){ + if( i > 0 ) attrs[field].editorAttrs['style']='display:none'; + }) + //create sameLevelType array + var tmp = { 'name' : "sameLevelType"+lev, 'options' : optionsTitle.toString() }; + this.sameLevelType.push(tmp); + + editorsAttr = editorsAttr.concat(optionsTitle) + }, this) + + //create fieldAttrs array + _.each(attrs, function(obj){ + if(!_.isUndefined(obj.name) && $.inArray(obj.name, editorsAttr) < 0 ){ + fieldAttrs.push(obj.name); + } + }); + + // Add Resources in same order as give in JSON + var addToschemaBase = true; + _.each(attrs,function(field, i) { + if(!_.isUndefined(field.name)){ + if($.inArray(field.name, editorsAttr) < 0 && addToschemaBase){ + this.schemaBase.push(field.name) + } + if($.inArray(field.name, editorsAttr) >= 0){ + addToschemaBase = false; + } + if($.inArray(field.name, editorsAttr) < 0 && !addToschemaBase){ + this.schemaBase1.unshift(field.name) + } + + } + }, this); + + + } + //add change events on all sameLevelType + _.each(this.sameLevelType, function(obj, i){ + that.on(obj.name+':change', function(form, fieldEditor) { + this.evResourceTypeChange(form, fieldEditor); + }); + }); + return attrs; + }, /** on render callback */ render: function(options) { var that = this; - Backbone.Form.prototype.render.call(this, options); //initialize path plugin for hdfs component : resourcePath if(!_.isUndefined(this.initilializePathPlugin) && this.initilializePathPlugin){ @@ -109,6 +199,7 @@ define(function(require){ this.setUpSwitches(); } this.$el.find('.field-isEnabled').find('.control-label').remove(); + this.setupSameLevelType(); }, evAuditChange : function(form, fieldEditor){ XAUtil.checkDirtyFieldForToggle(fieldEditor); @@ -119,12 +210,25 @@ define(function(require){ evResourceStatusChange : function(form, fieldEditor){ XAUtil.checkDirtyFieldForToggle(fieldEditor); }, + getTemplateData : function() { + var obj={ 'fieldsets' : true }; + if(this.sameLevelFound){ + obj = { sameLevelType : this.sameLevelType, + schemaBase : this.schemaBase.toString(), + schemaBase1 : this.schemaBase1.toString(), + + }; + if(this.schemaBase.length <= 2) + obj.marginBottom57 = 'margin-bottom-57'; + } + return obj; + }, setupForm : function() { _.each(this.model.attributes.resources,function(obj,key){ this.model.set(key, obj.values.toString()); - if(!_.isUndefined(obj.isRecursive)) + if(!_.isUndefined(obj.isRecursive)){ this.model.set('isRecursive', obj.isRecursive); - + } },this) }, setUpSwitches :function(){ @@ -134,6 +238,20 @@ define(function(require){ if(!_.isUndefined(this.fields.isRecursive)) this.fields.isRecursive.editor.setValue(this.model.get('isRecursive')); }, + setupSameLevelType : function() { + //setup sameLevelType `select` if there + _.each(this.sameLevelType, function(obj, i){ + if(!this.model.isNew()){ + var sameLevelOpt = obj.options.split(','); + var sameLevelVal = _.find(sameLevelOpt, function(type){ if(!_.isEmpty(this.model.get(type))) return type;},this) + console.log(this.model.attributes) + this.model.set(obj.name,sameLevelVal); + this.fields[obj.name].editor.$el.val(sameLevelVal).trigger('change') + }else{ + this.fields[obj.name].editor.$el.trigger('change') + } + }, this); + }, /** all custom field rendering */ renderCustomFields: function(){ var that = this; @@ -324,15 +442,16 @@ define(function(require){ }, - getPlugginAttr :function(autocomplete, searchType, lookupURL){ + getPlugginAttr :function(autocomplete, options){ var that =this; - var type = searchType; + var type = options.containerCssClass; if(!autocomplete) - return{tags : true,width :'220px',multiple: true,minimumInputLength: 1}; + return{tags : true,width :'220px',multiple: true,minimumInputLength: 1, 'containerCssClass' : type}; else { return { + containerCssClass : options.type, closeOnSelect : true, tags:true, multiple: true, @@ -357,7 +476,7 @@ define(function(require){ } }, ajax: { - url: lookupURL, + url: options.lookupURL, dataType: 'json', params : { timeout: 3000 @@ -405,6 +524,24 @@ define(function(require){ }; } }, + evResourceTypeChange : function(form, fieldEditor){ + var that = this; + var name = fieldEditor.$el.val(); + var sameLevel = _.findWhere(this.sameLevelType, {'name' : fieldEditor.key}); + form.$el.find('[data-editors="'+sameLevel.options+'"]').children().hide(); + this.fields[name].editor.$el.select2('val',''); + this.fields[name].editor.$el.show(); + form.$el.find('.'+name).show(); + + _.each(sameLevel.options.split(','), function(nm){ + if(name != nm){ + var index = this.fields.database.editor.validators.indexOf("required"); + this.fields[nm].editor.validators.splice(index,1); + this.fields[nm].editor.$el.select2('val',''); + } + }, this); + + }, }); return RangerPolicyForm; http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0d7f8dea/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js index eec4484..5726dd1 100644 --- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js +++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js @@ -125,6 +125,9 @@ define(function(require){ // this.initializePlugins(); // this.addVisualSearch(); this.renderTable(); + //TODO REMOVE + this.rTableList.$el.find('th[class="renderable table"]').removeClass('table') + // XAUtil.highlightDisabledPolicy(this); }, @@ -194,7 +197,7 @@ define(function(require){ formatter: _.extend({}, Backgrid.CellFormatter.prototype, { fromRaw: function (rawValue,model) { rawValue = model.get('resources') - return rawValue[obj.name].values.toString(); + return _.isUndefined(rawValue[obj.name]) ? '--' : rawValue[obj.name].values.toString(); } }) }; http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0d7f8dea/security-admin/src/main/webapp/styles/xa.css ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/styles/xa.css b/security-admin/src/main/webapp/styles/xa.css index 55f3a6a..89f3a47 100644 --- a/security-admin/src/main/webapp/styles/xa.css +++ b/security-admin/src/main/webapp/styles/xa.css @@ -1701,4 +1701,7 @@ margin-bottom: 5px; overflow-y: auto; padding-right: 25px; max-height: 250px; +} +.margin-bottom-57 { + margin-bottom:57px; } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0d7f8dea/security-admin/src/main/webapp/templates/policies/RangerPolicyForm_tmpl.html ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/templates/policies/RangerPolicyForm_tmpl.html b/security-admin/src/main/webapp/templates/policies/RangerPolicyForm_tmpl.html index d4df1fa..d2f26fe 100644 --- a/security-admin/src/main/webapp/templates/policies/RangerPolicyForm_tmpl.html +++ b/security-admin/src/main/webapp/templates/policies/RangerPolicyForm_tmpl.html @@ -19,7 +19,28 @@ <p class="formHeader"> Policy Details : </p> + + + +{{#if fieldsets}} <b data-fieldsets class="policy-form"></b> +{{else}} + <div data-fields="{{schemaBase}}" class="policy-form {{marginBottom57}}" ></div> + <div> + {{#each sameLevelType}} + <div style="margin-left: 65px;margin-bottom: 19px;"> + <span data-editors="{{this.name}}" class="policy-form" ></span> + <span data-editors="{{this.options}}" class="policy-form" style=" margin-left: 11px; "></span> + </div> + {{/each}} + <!-- <b data-editors="udf" class="policy-form"></b> --> + </div> + <div data-fields="{{schemaBase1}}" class="policy-form" ></div> +{{/if}} + <!-- <b data-fieldsets class="policy-form"></b> --> + + + </fieldset> <fieldset> <p class="formHeader"> http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0d7f8dea/security-admin/src/main/webapp/templates/policies/RangerPolicyTableLayout_tmpl.html ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/templates/policies/RangerPolicyTableLayout_tmpl.html b/security-admin/src/main/webapp/templates/policies/RangerPolicyTableLayout_tmpl.html index 5a8937e..6776d5d 100644 --- a/security-admin/src/main/webapp/templates/policies/RangerPolicyTableLayout_tmpl.html +++ b/security-admin/src/main/webapp/templates/policies/RangerPolicyTableLayout_tmpl.html @@ -24,7 +24,7 @@ <a href="#!/service/{{rangerService.id}}/policies/create" class="btn btn-primary btn-right" type="button"> {{tt 'lbl.addNewPolicy'}} </a> </div> - <div data-id="r_table" class="hdfs-table clickable"></div> + <div data-id="r_table" class="clickable"></div> </div> </div>
