Repository: incubator-ranger Updated Branches: refs/heads/tag-policy 7917b7013 -> 974034bee
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/974034be/security-admin/src/main/webapp/scripts/Init.js ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/scripts/Init.js b/security-admin/src/main/webapp/scripts/Init.js index a8acd0d..9b22ba5 100644 --- a/security-admin/src/main/webapp/scripts/Init.js +++ b/security-admin/src/main/webapp/scripts/Init.js @@ -93,7 +93,10 @@ }, 'bootbox' : { deps: ['jquery'] - } + }, + 'esprima': { + 'exports' : 'esprima' + }, }, paths: { @@ -145,6 +148,7 @@ 'i18nprecompile' : '../libs/bower/require-handlebars-plugin/js/i18nprecompile', 'json2' : '../libs/bower/require-handlebars-plugin/js/json2', 'hbs' : '../libs/bower/require-handlebars-plugin/js/hbs', + 'esprima' : '../libs/bower/esprima/esprima', 'tmpl' : '../templates' }, @@ -158,4 +162,4 @@ templateExtension: "html", compileOptions: {} } -}); +}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/974034be/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 36a513e..c8d187e 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 @@ -326,7 +326,9 @@ define(function(require) { policyDisabledMsg : 'This policy is currently in disabled state.', noRecordsFound : 'No Records Found', keyDeleteMsg : 'Key deleted successfully', - rolloverSuccessfully : 'Key rollover successfully' + rolloverSuccessfully : 'Key rollover successfully', + addUserOrGroup : 'Please select group/user for the selected permission, else group/user will not be added.', + addUserOrGroupForPC : 'Please select group/user for the added policy condition, else group/user will not be added.', http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/974034be/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 00075dc..d3530e7 100644 --- a/security-admin/src/main/webapp/scripts/utils/XAUtils.js +++ b/security-admin/src/main/webapp/scripts/utils/XAUtils.js @@ -941,7 +941,7 @@ define(function(require) { $.extend(PolicyConditions.prototype, { render : function() { - this.$input = this.$tpl.find('input'); + this.$input = this.$tpl.find('input, textarea'); var pluginOpts = { tags : true, width : '220px', @@ -949,7 +949,12 @@ define(function(require) { minimumInputLength : 1, tokenSeparators : [ ",", ";" ], } - this.$input.select2(pluginOpts); + _.each(this.$input, function(elem){ + if($(elem).is('input')){ + $(elem).select2(pluginOpts); + } + }) + }, value2str : function(value) { @@ -964,8 +969,14 @@ define(function(require) { value2input : function(value) { _.each(value, function(val, name) { - this.$input.filter('[name=' + name + ']').select2('val', - value[name]); + var elem = this.$input.filter('[name=' + name + ']'); + if((elem).is('input')){ + elem.select2('val', + value[name]); + }else{ + elem.val(value[name]) + } + }, this); }, @@ -973,8 +984,11 @@ define(function(require) { var obj = {}; _.each(this.$input, function(input) { var name = input.name; - var val = this.$input.filter('[name="' + name + '"]') - .select2('val'); + if($(input).is('input')){ + var val = this.$input.filter('[name="' + name + '"]').select2('val'); + }else{ + var val = $(input).val(); + } obj[name] = val; }, this); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/974034be/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js b/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js index 6e3eb63..590d80f 100644 --- a/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js +++ b/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js @@ -34,6 +34,7 @@ define(function(require) { var VXGroupList = require('collections/VXGroupList'); var VXUserList = require('collections/VXUserList'); require('bootstrap-editable'); + require('esprima'); var FormInputItem = Backbone.Marionette.ItemView.extend({ _msvName : 'FormInputItem', @@ -384,15 +385,20 @@ define(function(require) { var that = this; if(this.policyConditions.length > 0){ - var tmpl = _.map(this.policyConditions,function(obj){ + var tmpl = _.map(this.policyConditions,function(obj){ + if(!_.isUndefined(obj.evaluatorOptions) && !_.isUndefined(obj.evaluatorOptions['ui.isMultiline']) && Boolean(obj.evaluatorOptions['ui.isMultiline'])){ + return '<div class="editable-address margin-bottom-5"><label style="display:block !important;"><span>'+obj.label+' : </span><i title="JavaScript Condition Examples :\ncountry_code == \'USA\', time_range >= 900 && time_range <= 1800 etc." class="icon-info-sign" style="float: right;margin-top: 6px;"></i>\ + </label><textarea name="'+obj.name+'" placeholder="Please enter condtion.."></textarea></div>' + } return '<div class="editable-address margin-bottom-5"><label style="display:block !important;"><span>'+obj.label+' : </span></label><input type="text" name="'+obj.name+'" ></div>' + }); //Create new bootstrap x-editable `policyConditions` dataType for policy conditions XAUtil.customXEditableForPolicyCond(tmpl.join('')); //create x-editable for policy conditions this.$('#policyConditions').editable({ emptytext : 'Add Conditions', - value : this.conditions, + value : this.conditions, display: function(value) { var continue_ = false, i = 0; if(!value) { @@ -401,14 +407,19 @@ define(function(require) { } _.each(value, function(val, name){ if(!_.isEmpty(val)) continue_ = true; }); if(continue_){ + //Generate html to show on UI var html = _.map(value, function(val,name) { var label = (i%2 == 0) ? 'label label-inverse' : 'label'; + if(_.isEmpty(val)){ + return ''; + } i++; - return _.isEmpty(val) ? '' : '<span class="'+label+'">'+name+' : '+ val + '</span>'; + return '<span class="'+label+'" >'+name+' : '+ val + '</span>'; }); var cond = _.map(value, function(val, name) { return {'type' : name, 'values' : !_.isArray(val) ? val.split(',') : val}; }); + that.model.set('conditions', cond); $(this).html(html); that.ui.addConditionsSpan.find('i').attr('class', 'icon-pencil'); @@ -419,12 +430,39 @@ define(function(require) { that.ui.addConditionsSpan.find('i').attr('class', 'icon-plus'); that.ui.addConditionsSpan.attr('title','add'); } - } + }, + validate:function(value){ + var error = {'flag' : false}; + _.each(value, function(val, name){ + var tmp = _.findWhere(that.multiLinecond, { 'name' : name}); + if(!_.isUndefined(tmp)){ + try { + var t = esprima.parse(val); + }catch(e){ + if(!error.flag){ + console.log(e.message) + error.flag = true; + error.message = e.message; + error.fieldName = name; + } + } + } + }) + $('.editableform').find('.editable-error-block').remove(); + if(error.flag){ + $('.editableform').find('.editable-error-block').remove(); + $('.editableform').find('[name="'+error.fieldName+'"]').parent().append('<div class="editable-error-block help-block" style="display: none;"></div>') + return error.message; + } + }, }); that.ui.addConditionsSpan.click(function(e) { e.stopPropagation(); that.$('#policyConditions').editable('toggle'); }); + //to show only mutiline line policy codition + this.multiLinecond = _.filter(that.policyConditions, function(m){ return (!_.isUndefined(m.evaluatorOptions['ui.isMultiline']) && m.evaluatorOptions['ui.isMultiline']) }); + this.multiLinecond = _.isArray(this.multiLinecond) ? this.multiLinecond : [this.multiLinecond]; } }, http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/974034be/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js index 332a1d9..10875f1 100644 --- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js +++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js @@ -141,7 +141,12 @@ define(function(require){ var validateObj = this.form.formValidation(); valid = (validateObj.groupSet && validateObj.permSet) || (validateObj.userSet && validateObj.userPerm); if(!valid){ - if(validateObj.groupSet && (!validateObj.permSet)){ + if((!validateObj.groupSet && !validateObj.userSet) && (validateObj.condSet)) { + this.popupCallBack(localization.tt('msg.addUserOrGroupForPC'),validateObj); + }else if((!validateObj.groupSet && !validateObj.userSet) && (validateObj.permSet)) { + this.popupCallBack(localization.tt('msg.addUserOrGroup'),validateObj); + + }else if(validateObj.groupSet && (!validateObj.permSet)){ this.popupCallBack(localization.tt('msg.addGroupPermission'),validateObj); }else if((!validateObj.groupSet) && (validateObj.permSet)) { this.popupCallBack(localization.tt('msg.addGroup'),validateObj); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/974034be/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 bbb38f5..0f36791 100644 --- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js +++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js @@ -518,8 +518,8 @@ define(function(require){ return JSON.stringify(context); }, formValidation : function(){ - var groupSet = false,permSet = false,groupPermSet = false; - var userSet=false, userPerm = false, userPermSet =false,breakFlag =false; + var groupSet = false,permSet = false,groupPermSet = false, + userSet=false, userPerm = false, userPermSet =false,breakFlag =false, condSet = false; console.log('validation called..'); this.formInputList.each(function(m){ if(_.isEmpty(m.attributes)) return; @@ -539,12 +539,16 @@ define(function(require){ } } } + if(m.has('conditions')){ + condSet = m.has('conditions') ? true : false; + } }); var auditStatus = this.fields.isAuditEnabled.editor.getValue(); var obj = { groupPermSet : groupPermSet , groupSet : groupSet, userSet : userSet, isUsers:userPermSet, - auditLoggin : auditStatus + auditLoggin : auditStatus, + condSet : condSet, }; if(groupSet || userSet){ obj['permSet'] = groupSet ? permSet : false; http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/974034be/security-admin/src/main/webapp/templates/common/TopNav_tmpl.html ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/templates/common/TopNav_tmpl.html b/security-admin/src/main/webapp/templates/common/TopNav_tmpl.html index 6b62ba3..a5bc392 100644 --- a/security-admin/src/main/webapp/templates/common/TopNav_tmpl.html +++ b/security-admin/src/main/webapp/templates/common/TopNav_tmpl.html @@ -23,7 +23,7 @@ <li><a href="#!/policymanager/resource"><i class="icon-file"></i>Resource Based Policies</a></li> {{/hasAccessToTab}} {{#hasAccessToTab 'Tag Based Policies'}} - <li><a href="#!/policymanager/tag"><i class="icon-tag"></i>Tag Based Policies</a></li> + <li><a href="#!/policymanager/tag"><i class="icon-tags"></i>Tag Based Policies</a></li> {{/hasAccessToTab}} {{#hasAccessToTab 'Reports'}} <li><a href="#!/reports/userAccess"><i class="icon-beaker"></i>Reports</a></li>
