Repository: incubator-ranger Updated Branches: refs/heads/stack 7a6412dcd -> 89f7103cc
Pluggable-service-model: UI updates: Resource is shown only if its parent is selected. Other minor fixes. Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/89f7103c Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/89f7103c Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/89f7103c Branch: refs/heads/stack Commit: 89f7103cc40040b82862ff6faa30dfb5186e32bd Parents: 7a6412d Author: Gautam Borad <[email protected]> Authored: Wed Feb 11 19:05:45 2015 -0800 Committer: Madhan Neethiraj <[email protected]> Committed: Wed Feb 11 19:05:45 2015 -0800 ---------------------------------------------------------------------- .../org/apache/ranger/common/package-info.java | 26 ------- .../scripts/models/BackboneFormDataType.js | 24 ++++-- .../main/webapp/scripts/models/RangerPolicy.js | 15 ---- .../main/webapp/scripts/modules/XAOverrides.js | 18 +++-- .../scripts/modules/globalize/message/en.js | 12 +-- .../src/main/webapp/scripts/utils/XAUtils.js | 8 +- .../scripts/views/policies/RangerPolicyForm.js | 80 ++++++++++++++++---- security-admin/src/main/webapp/styles/xa.css | 14 +++- .../templates/policies/PermissionItem.html | 6 +- .../policies/RangerPolicyForm_tmpl.html | 9 ++- 10 files changed, 126 insertions(+), 86 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/89f7103c/ranger-util/src/gen/org/apache/ranger/common/package-info.java ---------------------------------------------------------------------- diff --git a/ranger-util/src/gen/org/apache/ranger/common/package-info.java b/ranger-util/src/gen/org/apache/ranger/common/package-info.java deleted file mode 100644 index 233f419..0000000 --- a/ranger-util/src/gen/org/apache/ranger/common/package-info.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - * Generated by saveVersion.sh - */ -@RangerVersionAnnotation(version="0.4.0", shortVersion="${ranger.version.shortname}", - revision="a6f8050b54206dfa61d87a756d7434ec70131d88", branch="stack", - user="mneethiraj", date="Tue Feb 10 17:06:21 PST 2015", url="git://HW10963.local/Users/mneethiraj/Apache/git-commit2/incubator-ranger", - srcChecksum="c0d896b805fcb51d32f80227c393ce33") -package org.apache.ranger.common; http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/89f7103c/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 cff762a..464bf4c 100644 --- a/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js +++ b/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js @@ -28,7 +28,7 @@ define(function(require) { var samelevelFieldCreated = []; _.each(configs, function(v, k,config) { if (v != null) { - var formObj = {}; + var formObj = {}, fieldName; switch (v.type) { case 'string': if($.inArray(v.level, samelevelFieldCreated) >= 0){ @@ -47,6 +47,9 @@ define(function(require) { formObj.name = v.name; formObj.level = v.level; formObj.editorAttrs = {'data-placeholder': v.label }; + formObj.fieldAttrs = { 'data-name' : 'field-'+v.name, 'parent' : v.parent }; + + //check whether resourceType drop down is created for same level or not var optionsAttrs = _.filter(config,function(field){ if(field.level == v.level) return field;}) if(optionsAttrs.length > 1){ @@ -55,9 +58,12 @@ define(function(require) { formObj['sameLevelOpts'] = optionsTitle; samelevelFieldCreated.push(v.level); - v.name='sameLevel'+v.level; - v.label = ''; + fieldName = 'sameLevel'+v.level; + formObj.title = ''; + + formObj['formView'] = form; } + }else{ formObj.type = 'Text'; } @@ -108,10 +114,12 @@ define(function(require) { break; + case 'password':formObj.type = 'Password';break; default:formObj.type = 'Text';break; } - - formObj.title = v.label || v.name; + if(_.isUndefined(formObj.title)){ + formObj.title = v.label || v.name; + } formObj.validators = []; if (_.has(v, 'mandatory') && v.mandatory && v.type != 'bool') { formObj.validators.push('required'); @@ -124,8 +132,10 @@ define(function(require) { } formObj['class'] = 'serviceConfig'; - var name = v.name; - attrs[name] = formObj; + if(_.isUndefined(fieldName)){ + fieldName = v.name; + } + attrs[fieldName] = formObj; } }); return attrs; http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/89f7103c/security-admin/src/main/webapp/scripts/models/RangerPolicy.js ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/scripts/models/RangerPolicy.js b/security-admin/src/main/webapp/scripts/models/RangerPolicy.js index a0a0cd8..0d8574d 100644 --- a/security-admin/src/main/webapp/scripts/models/RangerPolicy.js +++ b/security-admin/src/main/webapp/scripts/models/RangerPolicy.js @@ -54,19 +54,11 @@ define(function(require){ // Overwrite your schema definition here return _.extend(attrs,{ - id : { - type : 'Text', - title : 'Policy ID *', - validators : ['required'], - editorAttrs :{ 'disabled' : "true"}, - - }, name : { type : 'Text', title : 'Policy Name *', validators : ['required'], editorAttrs :{ maxlength: 255}, - }, description : { type : 'TextArea', @@ -81,13 +73,6 @@ define(function(require){ width : '80', switchOn : true }, - isRecursive : { - type : 'Switch', - title : localization.tt('lbl.includesAllPathsRecursively'), - onText : 'YES', - offText : 'NO', - switchOn : false, - }, isAuditEnabled : { type : 'Switch', title : localization.tt("lbl.auditLogging"), http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/89f7103c/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 bbacdac..e2fcc8f 100644 --- a/security-admin/src/main/webapp/scripts/modules/XAOverrides.js +++ b/security-admin/src/main/webapp/scripts/modules/XAOverrides.js @@ -361,7 +361,7 @@ initialize: function(options) { Form.editors.Base.prototype.initialize.call(this, options); _.extend(this, _.pick(this.schema,'excludeSupport','recursiveSupport','select2Opts','resourcesAtSameLevel','sameLevelOpts','level', - 'initilializePathPlugin', 'validators','name')); + 'initilializePathPlugin', 'validators','name','formView')); this.template = this.getTemplate(); // this.resourceObj = { 'level' : this.level}; @@ -377,7 +377,7 @@ return optionsHtml += "<option value='"+option+"'>"+option+"</option>"; },this); - selectTemplate = '<select data-js="resourceType" class="btn dropdown-toggle" style="margin-right: 18px;margin-left: -116px;width: 100px;height: 29px;font-family: Tahoma;font-size: 14px;border-radius: 10px;border: 2px #cccccc solid;">\ + selectTemplate = '<select data-js="resourceType" class="btn dropdown-toggle" style="margin-right: 31px;margin-left: -130px;width: 100px;height: 29px;font-family: Tahoma;font-size: 14px;border-radius: 10px;border: 2px #cccccc solid;">\ '+optionsHtml+'\ </select>'; @@ -454,7 +454,7 @@ this.$recursiveSupport.toggles({ on: isRecursive, text : {on : 'recursive', off : 'nonrecursive' }, - width: 122, + width: 105 // height: 20 }).on('toggle', function (e, active) { that.value.isRecursive = active; @@ -464,6 +464,7 @@ if(!_.isUndefined(this.$resourceType) && this.$resourceType.length > 0){ if(!_.isNull(this.value) && !_.isEmpty(this.value)){ this.$resourceType.val(this.value.resourceType); + // } this.$resourceType.on('change', function(e) { if(!_.isUndefined(that.select2Opts)){ @@ -476,18 +477,25 @@ that.$resource.val(''); } //reset values - that.value.isExcludes = true; + that.value.isExcludes = false; that.value.isRecursive = true; that.$excludeSupport.trigger('toggleOn'); that.$recursiveSupport.trigger('toggleOn'); ($(e.currentTarget).addClass('dirtyField')) + + //resource are shown if parent is selected or showned + that.$el.parents('.control-group').attr('data-name', 'field-'+this.value); + that.formView.trigger('policyForm:parentChildHideShow',true); }); } return this; }, getValue: function() { - + //checkParent + if(this.$el.parents('.control-group').hasClass('hideResource')){ + return null; + } if(!_.isUndefined(this.$resourceType) && this.$resourceType.length > 0){ this.value['resourceType'] = this.$resourceType.val(); } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/89f7103c/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js b/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js index 5e3377a..6320028 100644 --- a/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js +++ b/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js @@ -298,14 +298,10 @@ define(function(require) { searchByResourcePath :'Search by resource path' }, dialogMsg :{ - preventNavPolicyForm : 'HDFS policy form edit is in progress. Kindly save/cancel changes before navigating away!', - preventNavHivePolicyForm : 'HIVE policy form edit is in progress. Kindly save/cancel changes before navigating away!', - preventNavHbasePolicyForm : 'HBASE policy form edit is in progress. Kindly save/cancel changes before navigating away!', - preventNavKnoxPolicyForm : 'KNOX policy form edit is in progress. Kindly save/cancel changes before navigating away!', - preventNavStormPolicyForm : 'STORM policy form edit is in progress. Kindly save/cancel changes before navigating away!', - preventNavRepositoryForm : 'Repository form edit is in progress. Kindly save/cancel changes before navigating away!', - preventNavUserForm : 'User form edit is in progress. Kindly save/cancel changes before navigating away!', - preventNavGroupForm : 'Group form edit is in progress. Kindly save/cancel changes before navigating away!' + preventNavPolicyForm : 'Policy form edit is in progress. Please save/cancel changes before navigating away!', + preventNavRepositoryForm : 'Repository form edit is in progress. Please save/cancel changes before navigating away!', + preventNavUserForm : 'User form edit is in progress. Please save/cancel changes before navigating away!', + preventNavGroupForm : 'Group form edit is in progress. Please save/cancel changes before navigating away!' }, validationMessages : { http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/89f7103c/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 b2514f3..2f3b3d7 100644 --- a/security-admin/src/main/webapp/scripts/utils/XAUtils.js +++ b/security-admin/src/main/webapp/scripts/utils/XAUtils.js @@ -701,13 +701,15 @@ define(function(require) { $.extend(PolicyConditions.prototype, { render: function() { this.$input = this.$tpl.find('input'); + var pluginOpts = {tags : true,width :'220px',multiple: true,minimumInputLength: 1,tokenSeparators: [",", ";"],} + this.$input.select2(pluginOpts); }, value2str: function(value) { var str = ''; if(value) { for(var k in value) { - str = str + k + ':' + value[k] + ';'; + str = str + k + ':' + value[k].toString() + ';'; } } return str; @@ -715,7 +717,7 @@ define(function(require) { value2input: function(value) { _.each(value, function(val,name){ - this.$input.filter('[name='+name+']').val(value[name]); + this.$input.filter('[name='+name+']').select2('val',value[name]); },this); }, @@ -723,7 +725,7 @@ define(function(require) { var obj={}; _.each(this.$input,function(input){ var name = input.name; - var val = this.$input.filter('[name="'+name+'"]').val() + var val = this.$input.filter('[name="'+name+'"]').select2('val'); obj[name] = val; },this); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/89f7103c/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 d077ca1..ee96226 100644 --- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js +++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js @@ -22,7 +22,6 @@ define(function(require){ 'use strict'; var Backbone = require('backbone'); - var XAEnums = require('utils/XAEnums'); var localization = require('utils/XALangSupport'); var XAUtil = require('utils/XAUtils'); @@ -53,6 +52,9 @@ define(function(require){ * intialize a new RangerPolicyForm Form View * @constructs */ + templateData : function(){ + return { 'id' : this.model.id }; + }, initialize: function(options) { console.log("initialized a RangerPolicyForm Form View"); _.extend(this, _.pick(options, 'rangerServiceDefModel', 'rangerService')); @@ -61,6 +63,7 @@ define(function(require){ this.initializeCollection(); this.bindEvents(); + this.defaultValidator={} }, initializeCollection: function(){ this.formInputList = XAUtil.makeCollForGroupPermission(this.model); @@ -73,6 +76,7 @@ define(function(require){ this.on('isEnabled:change', function(form, fieldEditor){ this.evIsEnabledChange(form, fieldEditor); }); + this.on('policyForm:parentChildHideShow',this.renderParentChildHideShow); }, /** fields for the form @@ -85,9 +89,6 @@ define(function(require){ var attrs = {}; var basicSchema = ['id', 'name','isEnabled'] var schemaNames = ['description', 'isAuditEnabled']; - if(this.model.isNew()){ - basicSchema.shift(); - } var formDataType = new BackboneFormDataType(); attrs = formDataType.getFormElements(this.rangerServiceDefModel.get('resources'),this.rangerServiceDefModel.get('enums'), attrs, this); @@ -110,6 +111,51 @@ define(function(require){ this.setUpSwitches(); } this.$el.find('.field-isEnabled').find('.control-label').remove(); + //checkParent + this.renderParentChildHideShow(); + }, + renderParentChildHideShow : function(onChangeOfSameLevelType) { + var formDiv = this.$el.find('.policy-form'); + if(!this.model.isNew() && !onChangeOfSameLevelType){ + _.each(this.selectedResourceTypes, function(val, sameLevelName) { + if(formDiv.find('.field-'+sameLevelName).length > 0){ + formDiv.find('.field-'+sameLevelName).attr('data-name','field-'+val) + } + }); + } + var resources = formDiv.find('.control-group'); + _.each(resources, function(rsrc){ + var parent = $(rsrc).attr('parent') + if( !_.isUndefined(parent) && ! _.isEmpty(parent)){ + console.log(formDiv.find()) + var selector = "div[data-name='field-"+parent+"']" + if(formDiv.find(selector).length > 0 && !formDiv.find(selector).hasClass('hideResource')){ + $(rsrc).removeClass('hideResource'); + }else{ + $(rsrc).addClass('hideResource'); + } + } + },this); + + _.each(this.fields, function(obj, key){ + if(obj.$el.hasClass('hideResource')){ + if($.inArray('required',obj.editor.validators) >= 0){ + this.defaultValidator[key] = obj.editor.validators; + obj.editor.validators=[]; + var label = obj.$el.find('label').html(); + obj.$el.find('label').html(label.replace('*', '')); + } + }else{ + if(!_.isUndefined(this.defaultValidator[key])){ + obj.editor.validators = this.defaultValidator[key]; + if($.inArray('required',obj.editor.validators) >= 0){ + var label = obj.$el.find('label').html(); + obj.$el.find('label').html(label+"*"); + } + } + } + }, this); +// alert(); }, evAuditChange : function(form, fieldEditor){ XAUtil.checkDirtyFieldForToggle(fieldEditor.$el); @@ -119,12 +165,15 @@ define(function(require){ }, setupForm : function() { if(!this.model.isNew()){ + this.selectedResourceTypes = {}; _.each(this.model.get('resources'),function(obj,key){ var resourceDef = _.findWhere(this.rangerServiceDefModel.get('resources'),{'name':key}) var sameLevelResourceDef = _.where(this.rangerServiceDefModel.get('resources'), {'level': resourceDef.level}); if(sameLevelResourceDef.length > 1){ obj['resourceType'] = key; this.model.set('sameLevel'+resourceDef.level, obj) + //parentShowHide + this.selectedResourceTypes['sameLevel'+resourceDef.level]=key; }else{ this.model.set(resourceDef.name, obj) } @@ -171,11 +220,18 @@ define(function(require){ var that = this, resources = []; var resources = {}; + //set sameLevel fieldAttr value with resource name + _.each(this.model.attributes, function(val, key) { + if(key.indexOf("sameLevel") >= 0){ + this.model.set(val.resourceType,val); + that.model.unset(key); + } + },this); _.each(this.rangerServiceDefModel.get('resources'),function(obj){ if(!_.isNull(obj)){ - var rPolicyResource = new RangerPolicyResource(); 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) @@ -183,21 +239,13 @@ define(function(require){ if(!_.isUndefined(tmpObj.isExcludes)){ rPolicyResource.set('isExcludes', tmpObj.isExcludes) } + resources[obj.name] = rPolicyResource; + that.model.unset(obj.name); } - if(rPolicyResource.has('values')){ - if(!_.isUndefined(tmpObj) && !_.isUndefined(tmpObj.resourceType)){ - resources[tmpObj.resourceType] = rPolicyResource; - }else{ - if(_.isUndefined(resources[obj.name])){ - resources[obj.name] = rPolicyResource; - } - } - } - that.model.unset(obj.name); } }); + this.model.set('resources',resources); - this.model.unset('isRecursive'); this.model.unset('path'); //Set UserGroups Permission http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/89f7103c/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 468155e..6c51ac0 100644 --- a/security-admin/src/main/webapp/styles/xa.css +++ b/security-admin/src/main/webapp/styles/xa.css @@ -285,8 +285,8 @@ body { .toggle-xa .toggle-slide .toggle-off, .toggle-xa .toggle-slide .toggle-blob { color: rgba(0, 0, 0, 0.7); - font-size: 14px; - font-weight: 700; + font-size: 13px; + font-weight: 600; } .toggle-xa .toggle-slide .toggle-on { background: #3ea211; @@ -1740,4 +1740,14 @@ margin-top: -29px; .policy-form .help-inline { position: relative; top: 10px; +} +.hideResource{ + display:none; +} +.btn-mini { + padding: 0px 8px; + font-size: 11.05px; +} +.label-ranger { + background-color: #3C9C11; } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/89f7103c/security-admin/src/main/webapp/templates/policies/PermissionItem.html ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/templates/policies/PermissionItem.html b/security-admin/src/main/webapp/templates/policies/PermissionItem.html index 20b4c75..99c20fa 100644 --- a/security-admin/src/main/webapp/templates/policies/PermissionItem.html +++ b/security-admin/src/main/webapp/templates/policies/PermissionItem.html @@ -23,12 +23,14 @@ {{#if policyConditions}} <td> <a href="#" id="policyConditions" data-type="policyConditions" data-original-title="Policy Conditions" title="add/edit conditions"></a> - <span class="add-conditions link-tag" style="margin-left: 3%; color: green; cursor: pointer;" title="add"><i class="icon-plus"></i></span> + <button type="button" class="btn btn-mini add-conditions" title="Add" style="display: inline-block;"><i class="icon-plus"></i> + </button> </td> {{/if}} <td> <a href="#" data-js="permissions" data-type="checklist" data-title="Select permissions" title="add/edit permissions" /> - <span class="add-permissions link-tag" style="margin-left: 3%; color: green; cursor: pointer;" title="add"><i class="icon-plus"></i></span> + <button type="button" class="btn btn-mini add-permissions" title="Add" style="display: inline-block;"><i class="icon-plus"></i> + </button> </td> <td style=" width: 12%; "> <input data-js="delegatedAdmin" type="checkbox"> http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/89f7103c/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 0479ea8..270e53d 100644 --- a/security-admin/src/main/webapp/templates/policies/RangerPolicyForm_tmpl.html +++ b/security-admin/src/main/webapp/templates/policies/RangerPolicyForm_tmpl.html @@ -19,8 +19,13 @@ <p class="formHeader"> Policy Details : </p> - - <b data-fieldsets class="policy-form"></b> + {{#if id}} + <div class="control-group field-id"> + <label class="control-label" for="c1836_id">Policy ID</label> + <div class="controls"><label class="label label-ranger" style="margin-top: 5px; margin-left: 9px;">{{id}}</label></div> + </div> + {{/if}} + <b data-fieldsets class="policy-form"></b> </fieldset> <fieldset>
