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

Signed-off-by: Madhan Neethiraj <[email protected]>


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/master
Commit: 89b7ba227ae27f3c78ce86e4e4b268beaeba22a0
Parents: a9b153d
Author: Gautam Borad <[email protected]>
Authored: Thu Oct 1 17:02:26 2015 +0530
Committer: Madhan Neethiraj <[email protected]>
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);
                                        }

Reply via email to