Repository: incubator-ranger
Updated Branches:
  refs/heads/stack 23da1956e -> 1f458f00f


Ranger-203: Implemented Service edit, and Policy create/update


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

Branch: refs/heads/stack
Commit: 1f458f00f57c0e118a5822353795b2ef874a210d
Parents: 23da195
Author: Gautam Borad <[email protected]>
Authored: Thu Jan 8 00:50:15 2015 -0800
Committer: Madhan Neethiraj <[email protected]>
Committed: Thu Jan 8 00:50:15 2015 -0800

----------------------------------------------------------------------
 .gitignore                                      |   1 +
 .../service-defs/ranger-servicedef-hbase.json   |   4 +-
 .../service-defs/ranger-servicedef-hdfs.json    |   2 +-
 .../scripts/models/BackboneFormDataType.js      |  78 ++++++++
 .../scripts/views/policies/GroupPermList.js     |  29 +--
 .../views/policies/RangerPolicyCreate.js        |  11 +-
 .../scripts/views/policies/RangerPolicyForm.js  | 179 +++----------------
 .../views/policies/RangerPolicyTableLayout.js   |  56 +++++-
 .../scripts/views/policies/UserPermList.js      |  34 ++--
 .../scripts/views/service/ServiceCreate.js      |   2 +-
 .../webapp/scripts/views/service/ServiceForm.js |  39 +---
 .../templates/policies/GroupPermItem.html       |   2 +-
 .../webapp/templates/policies/UserPermItem.html |   2 +-
 13 files changed, 206 insertions(+), 233 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1f458f00/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index f665a6d..83beeef 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
 *.class
+*.iml
 .settings
 .metadata
 .classpath

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1f458f00/plugin-common/src/main/resources/service-defs/ranger-servicedef-hbase.json
----------------------------------------------------------------------
diff --git 
a/plugin-common/src/main/resources/service-defs/ranger-servicedef-hbase.json 
b/plugin-common/src/main/resources/service-defs/ranger-servicedef-hbase.json
index 04127bb..2cecf44 100644
--- a/plugin-common/src/main/resources/service-defs/ranger-servicedef-hbase.json
+++ b/plugin-common/src/main/resources/service-defs/ranger-servicedef-hbase.json
@@ -24,9 +24,9 @@
   [
     {"name":"username","type":"string","mandatory":true,"label":"Username"},
        
{"name":"password","type":"password","mandatory":true,"label":"Password"},
-       
{"name":"hadoop.security.authentication","type":"enum","subtype":"authnType","mandatory":true,"defaultValue":"simple"},
+       
{"name":"hadoop.security.authentication","type":"enum","subType":"authnType","mandatory":true,"defaultValue":"simple"},
        
{"name":"hbase.master.kerberos.principal","type":"string","mandatory":false,"defaultValue":""},
-       
{"name":"hbase.security.authentication","type":"enum","subtype":"authnType","mandatory":true,"defaultValue":"simple"},
+       
{"name":"hbase.security.authentication","type":"enum","subType":"authnType","mandatory":true,"defaultValue":"simple"},
        
{"name":"hbase.zookeeper.property.clientPort","type":"int","mandatory":true,"defaultValue":"2181"},
        
{"name":"hbase.zookeeper.quorum","type":"string","mandatory":true,"defaultValue":""},
        
{"name":"zookeeper.znode.parent","type":"string","mandatory":true,"defaultValue":"/hbase"}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1f458f00/plugin-common/src/main/resources/service-defs/ranger-servicedef-hdfs.json
----------------------------------------------------------------------
diff --git 
a/plugin-common/src/main/resources/service-defs/ranger-servicedef-hdfs.json 
b/plugin-common/src/main/resources/service-defs/ranger-servicedef-hdfs.json
index 20ae6b9..b2431c7 100644
--- a/plugin-common/src/main/resources/service-defs/ranger-servicedef-hdfs.json
+++ b/plugin-common/src/main/resources/service-defs/ranger-servicedef-hdfs.json
@@ -35,7 +35,7 @@
     {"name":"username","type":"string","mandatory":true,"label":"Username"},
        
{"name":"password","type":"password","mandatory":true,"label":"Password"},
        
{"name":"hadoop.security.authorization","type":"bool","mandatory":true,"defaultValue":"false"},
-       
{"name":"hadoop.security.authentication","type":"enum","subtype":"authnType","mandatory":true,"defaultValue":"simple"},
+       
{"name":"hadoop.security.authentication","type":"enum","subType":"authnType","mandatory":true,"defaultValue":"simple"},
        
{"name":"hadoop.security.auth_to_local","type":"string","mandatory":false},
        
{"name":"dfs.datanode.kerberos.principal","type":"string","mandatory":false},
        
{"name":"dfs.namenode.kerberos.principal","type":"string","mandatory":false},

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1f458f00/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
new file mode 100644
index 0000000..6a040af
--- /dev/null
+++ b/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js
@@ -0,0 +1,78 @@
+/*
+ * 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.
+ */
+
+define(function(require) {
+       'use strict';
+
+       var Backbone = require('backbone');
+
+       var FormDataType = Backbone.Model.extend({
+               type : [ 'string', 'boolean', 'int' ],
+               getFormElements : function(configs, enums, attrs, form) {
+//                     var attrs = [];
+                       _.each(configs, function(v, k) {
+                               if (v != null) {
+                                       var formObj = {};
+                                       switch (v.type) {
+                                               case 'string':formObj.type = 
'Text';break;
+                                               case 'bool':
+                                                       formObj.type = 
'Checkbox';
+                                                       formObj.options = {     
y : 'Yes',n : 'No'};
+                                                       break;
+                                               case 'int':formObj.type = 
'Number';break;
+                                               case 'enum':
+                                                       var enumObj = 
_.find(enums, function(e) {return e && e.name == v.subType;});
+                                                       formObj.type = 'Select';
+                                                       formObj.options = 
_.pluck(_.compact(enumObj.elements),'label');
+                                                       break;
+                                               case 'select2' : 
+                                                       formObj.type = 
'Select2Remote';
+                                                       formObj.pluginAttr = 
form.getPlugginAttr(false),
+                                                       formObj.editorAttrs = 
{'data-placeholder': v.label },
+                                                       formObj.options = 
function(callback, editor){
+                                           callback();
+                                       },
+                                       formObj.onFocusOpen = true
+                                                       break;
+                                               case 'path' : 
+                                                       formObj.type = 'Text';
+                                                       
form.initilializePathPlugin = true;
+                                                       form.pathFieldName = 
v.name;
+                                                       break;
+                                               default:formObj.type = 
'Text';break;
+                                       }
+
+                                       formObj.title = v.label || v.name;
+                                       formObj.validators = [];
+                                       if (_.has(v, 'mandatory') && 
v.mandatory) {
+                                               
formObj.validators.push('required');
+                                               formObj.title = formObj.title + 
" *"
+                                       }
+                                       formObj['class'] = 'serviceConfig';
+                                       var name = v.name;
+                                       attrs[name] = formObj;
+                               }
+                       });
+                       return attrs;
+
+               }
+       });
+       return FormDataType;
+
+});

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1f458f00/security-admin/src/main/webapp/scripts/views/policies/GroupPermList.js
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/scripts/views/policies/GroupPermList.js 
b/security-admin/src/main/webapp/scripts/views/policies/GroupPermList.js
index dfc9c4a..2f15b58 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/GroupPermList.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/GroupPermList.js
@@ -39,7 +39,7 @@ define(function(require) {
                        
                        
                        return {
-                               permissions     : this.getPerms(),
+                               permissions     : 
this.accessTypes,//this.getPerms(),
                                policyKnox              : this.policyType == 
XAEnums.ServiceType.Service_KNOX.value ? true :false,
 //                             policyStorm     : this.policyType == 
XAEnums.ServiceType.Service_STORM.value ? true :false,
                                isModelNew              : 
!this.model.has('editMode'),
@@ -71,10 +71,16 @@ define(function(require) {
                                                                                
});
                                }
                        }
+                       
                },
  
                onRender : function() {
                        var that = this;
+                       this.accessItems = _.map(this.accessTypes, 
function(perm){ 
+                               if(!_.isUndefined(perm)) 
+                                       return {'type':perm.label,isAllowed : 
false}
+                       });
+                       
                        if(!_.isUndefined(this.model.get('groupName'))){
                                
this.ui.selectGroups.val(this.model.get('groupName').split(','));
                        }
@@ -83,8 +89,10 @@ define(function(require) {
                        }
                        if(this.model.has('editMode') && 
this.model.get('editMode')){
                                _.each(this.model.get('accesses'), function(p){
-                                       if(p.value)
+                                       if(p.isAllowed){
                                                
this.$el.find('input[data-name="' + p.type + '"]').attr('checked', 'checked');
+                                               
_.each(this.accessItems,function(obj){ if(obj.type == p.type) 
obj.isAllowed=true;})
+                                       }
                                },this);
                        }
                        this.createGroupDropDown();
@@ -92,9 +100,6 @@ define(function(require) {
                        if(this.policyType == 
XAEnums.AssetType.ASSET_STORM.value){
                                this.renderStormPerms();
                        }
-                       
-                       
-                       this.accessItems = _.map(this.getPerms(), 
function(perm){ if(!_.isUndefined(perm)) return {'type':perm.label,value : 
false}});
                },
                groupDropDownChange : function(){
                        var that = this;
@@ -232,7 +237,7 @@ define(function(require) {
                        }
                        var curPerm = $el.find('input').data('id');
                        var curPermName = $el.find('input').data('name');
-                       if(!_.isUndefined(curPerm)){
+                       if(!_.isUndefined(curPermName)){
                                var perms = [];
                                if(this.model.has('accesses')){
                                        
if(_.isArray(this.model.get('accesses')))
@@ -241,16 +246,16 @@ define(function(require) {
                                                
perms.push(this.model.get('accesses'));
                                }
                                
if($el.find('input[type="checkbox"]').is(':checked')){
-                                       _.each(that.accessItems, function(obj){ 
if(obj.type == curPermName) obj.value = true });
+                                       _.each(that.accessItems, function(obj){ 
if(obj.type == curPermName) obj.isAllowed = true });
                                        
-                                       if(curPerm == 
XAEnums.XAPermType.XA_PERM_TYPE_ADMIN.value){
-                                               
$el.parent().find('input[type="checkbox"]:not(:checked)[data-id!="'+curPerm+'"]').map(function(){
-                                                       
_.each(that.accessItems, function(obj){ if(obj.type == $(this).data('name')) 
obj.value = true }, this);
+                                       /*if(curPermName == 
XAEnums.XAPermType.XA_PERM_TYPE_ADMIN.value){
+                                               
$el.parent().find('input[type="checkbox"]:not(:checked)[data-name!="'+curPermName+'"]').map(function(){
+                                                       
_.each(that.accessItems, function(obj){ if(obj.type == $(this).data('name')) 
obj.isAllowed = true }, this);
                                                });
                                                
$el.parent().find('input[type="checkbox"]').prop('checked',true);
-                                       }
+                                       }*/
                                } else {
-                                       _.each(that.accessItems, function(obj){ 
if(obj.type == curPermName ) obj.value = false }, this);
+                                       _.each(that.accessItems, function(obj){ 
if(obj.type == curPermName ) obj.isAllowed = false }, this);
                                }
                                
 //                             this.checkDirtyFieldForCheckBox(perms);

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1f458f00/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 bd2b71e..fa11698 100644
--- 
a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js
+++ 
b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js
@@ -102,9 +102,6 @@ define(function(require){
                },
                initializeServiceDef : function(){
                        
-                       var service = 
_.find(XAEnums.ServiceType,function(service){
-                               return service.label.toUpperCase() == 
this.rangerService.get('type').toUpperCase();
-                       },this);
                        this.rangerServiceDefModel      = new 
RangerServiceDef();
                        this.rangerServiceDefModel.url = 
"service/plugins/definitions/name/"+this.rangerService.get('type');
                        this.rangerServiceDefModel.fetch({
@@ -129,7 +126,7 @@ define(function(require){
                },
 
                /** all post render plugin initialization */
-               initializePlugins: function(){
+       /*      initializePlugins: function(){
                },
                popupCallBack : function(msg,validateObj){
                        var that = this;
@@ -140,7 +137,7 @@ define(function(require){
                                //              that.savePolicy();
                                }
                        });
-               },
+               },*/
                onSave: function(){
                        var that = this, valid = false;
                        var errors = this.form.commit({validate : false});
@@ -281,7 +278,7 @@ define(function(require){
                                }
                        });
                },
-               onDelete :function(){
+               /*onDelete :function(){
                        var that = this;
                        XAUtil.confirmPopup({
                                //msg :localize.tt('msg.confirmDelete'),
@@ -307,7 +304,7 @@ define(function(require){
                                        
                                }
                        });
-               },
+               },*/
                onCancel : function(){
                        XAUtil.allowNavigation();
                        
App.appRouter.navigate("#!/service/"+this.rangerService.id+"/policies",{trigger:
 true});

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1f458f00/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 8bb5061..f0cb86b 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
@@ -36,7 +36,7 @@ define(function(require){
        var GroupPermList       = require('views/policies/GroupPermList');
        var UserPermList        = require('views/policies/UserPermList');
        var RangerPolicyResource                = 
require('models/RangerPolicyResource');
-       var RangerPolicyResourceList    = 
require('collections/RangerPolicyResourceList');
+       var BackboneFormDataType        = 
require('models/BackboneFormDataType');
 
        require('backbone-forms.list');
        require('backbone-forms.templates');
@@ -109,40 +109,9 @@ define(function(require){
                schema :function(){
                        var attrs = {};
                        var that = this;
-                       
_.each(this.rangerServiceDefModel.get('resources'),function(v,k){ 
-                               if (v != null) {
+                       var formDataType = new BackboneFormDataType();
+                       attrs = 
formDataType.getFormElements(this.rangerServiceDefModel.get('resources'),this.rangerServiceDefModel.get('enums'),
 attrs, this);
 
-                                       var formObj = {};
-                                       switch(v.type){
-                                                       case 'string' : 
formObj.type = 'Text'; break;
-                                                       case 'select2' : 
-                                                               formObj.type = 
'Select2Remote';
-                                                               
formObj.pluginAttr = that.getPlugginAttr(false),
-                                                               
formObj.editorAttrs = {'data-placeholder': v.label },
-                                                               formObj.options 
= function(callback, editor){
-                                                   callback();
-                                               },
-                                               formObj.onFocusOpen = true
-                                                               break;
-                                                       case 'path' : 
-                                                               formObj.type = 
'Text';
-                                                               
that.initilializePathPlugin = true;
-                                                               
that.pathFieldName = v.name;
-                                                               break;
-                                                       default : formObj.type 
= 'Text'; break;
-                                       }       
-
-                                       formObj.title = v.label || v.name;
-                                       formObj.validators = [];
-                                       if (_.has(v,'mandatory') && 
v.mandatory){
-                                               
formObj.validators.push('required');
-                                               formObj.title = formObj.title 
+" *"
-                                       }
-                                       formObj['class'] = 'serviceConfig';
-                                       var name = v.name;
-                                       attrs[name] = formObj;
-                               }
-                       });
                        var attr1 = _.pick(_.result(this.model,'schemaBase'), 
'name','isEnabled');
                        var attr2 = 
_.pick(_.result(this.model,'schemaBase'),'description', 'isRecursive', 
'isAuditEnabled');
                        return _.extend(attr1,_.extend(attrs,attr2));
@@ -178,86 +147,10 @@ define(function(require){
                evResourceStatusChange : function(form, fieldEditor){
                        XAUtil.checkDirtyFieldForToggle(fieldEditor);
                },
-               formValidation : function(){
-                       var groupSet = false,permSet = false,auditStatus= 
false,encryptStatus= false,groupPermSet = false,
-                                                       userSet=false,userPerm 
= false,isUsers =false;
-                       console.log('validation called..');
-                       var breakFlag =false;
-                       this.formInputList.each(function(m){
-                               if(m.has('groupId') ||  m.has('_vPermList')){
-                                       if(! breakFlag){
-                                               groupSet = m.has('groupId') ? 
true : false ; 
-                                               if(!m.has('_vPermList')){
-                                                       permSet = false;
-                                               }else
-                                                       permSet = true;
-                                               if(groupSet && permSet)
-                                                       groupPermSet = true;
-                                               else
-                                                       breakFlag=true;
-                                       }
-                               }
-                       });
-                       breakFlag = false;
-                       
-                       this.userPermInputList.each(function(m){
-                                       if(! breakFlag){
-                                               userSet = m.has('userId') || 
m.has('userName') ? true : false ; 
-                                               if(!m.has('_vPermList')){
-                                                       userPerm = false;
-                                               }else
-                                                       userPerm = true;
-                                               if(userSet && userPerm)
-                                                       isUsers = true;
-                                               else
-                                                       breakFlag=true;
-                                       }
-                       });
-                       var auditLoggin = 
this.fields.isAuditEnabled.editor.getValue();
-
-                       return {groupPermSet: groupPermSet , groupSet : 
groupSet,permSet : permSet,auditLoggin :auditLoggin,
-                               userSet : 
userSet,userPerm:userPerm,isUsers:isUsers};
-               },
                setupForm : function() {
-                       var resourcePath = _.map(this.model.get('resources'), 
function(obj,i){
-                               if( i == 0 ) this.model.set('isRecursive', 
obj.isRecursive) 
-                               return obj.value; 
-                       }, this);
-                       if(this.rangerService.get('type').toUpperCase() == 
XAEnums.ServiceType.Service_HDFS.label.toUpperCase()){
-                               this.model.set('path', resourcePath.toString());
-                       }else if(this.rangerService.get('type').toUpperCase() 
== XAEnums.ServiceType.Service_HIVE.label.toUpperCase()){
-                               _.each(resourcePath, function(path) {
-                                       var temp  = path.split("/");
-                                       if(!_.isUndefined(temp[1]))     
this.model.set('database', temp[1])     
-                                       if(!_.isUndefined(temp[2]))     
this.model.set('table', temp[2])
-                                       if(!_.isUndefined(temp[3]))     
this.model.set('column', temp[3])
-                                       
-                               },this);
-                       }else if(this.rangerService.get('type').toUpperCase() 
== XAEnums.ServiceType.Service_HBASE.label.toUpperCase()){
-                               _.each(resourcePath, function(path) {
-                                       var temp  = path.split("/");
-                                       if(!_.isUndefined(temp[1]))     
this.model.set('table', temp[1])        
-                                       if(!_.isUndefined(temp[2]))     
this.model.set('column-family', temp[2])
-                                       if(!_.isUndefined(temp[3]))     
this.model.set('column', temp[3])
-                                       
-                               },this);
-                       }else if(this.rangerService.get('type').toUpperCase() 
== XAEnums.ServiceType.Service_KNOX.label.toUpperCase()){
-                               _.each(resourcePath, function(path) {
-                                       var temp  = path.split("/");
-                                       if(!_.isUndefined(temp[1]))     
this.model.set('topology', temp[1])     
-                                       if(!_.isUndefined(temp[2]))     
this.model.set('service', temp[2])
-                                       
-                               },this);
-                       }else if(this.rangerService.get('type').toUpperCase() 
== XAEnums.ServiceType.Service_STORM.label.toUpperCase()){
-                               var resourcePath = 
_.map(this.model.get('resources'), function(obj,i){
-                                       if( i == 0 ) 
this.model.set('isRecursive', obj.isRecursive) 
-                                       return obj.value; 
-                               }, this);
-                               _.each(resourcePath, function(path) {
-                                       var temp  = path.split("/");
-                                       if(!_.isUndefined(temp[1]))     
this.model.set('topology', temp[1])     
-                               },this);
-                       }
+                       
_.each(this.model.attributes.resources,function(obj,key){
+                               this.model.set(key, obj.values.toString())
+                       },this)
                },
                setUpSwitches :function(){
                        var that = this;
@@ -280,11 +173,6 @@ define(function(require){
                renderCustomFields: function(){
                        var that = this;
                        var accessType = 
this.rangerServiceDefModel.get('accessTypes').filter(function(val) { return val 
!== null; });
-                       var policyType = this.rangerService.get('type')
-                       _.each(XAEnums.ServiceType, function(obj){ 
-                               if(that.rangerService.get('type').toUpperCase() 
== obj.label.toUpperCase())
-                                       policyType = obj.value;
-                       });
                        this.groupList = new VXGroupList();
                        var params = {sortBy : 'name'};
                        this.groupList.setPageSize(100,{fetch:false});
@@ -296,7 +184,7 @@ define(function(require){
                                                collection : that.formInputList,
                                                groupList  : that.groupList,
                                                model : that.model,
-                                               policyType      : policyType,
+//                                             policyType      : policyType,
                                                accessTypes : accessType,
                                                rangerServiceDefModel : 
that.rangerServiceDefModel
                                        }).render().el);
@@ -313,7 +201,7 @@ define(function(require){
                                                collection : 
that.userPermInputList,
                                                model : that.model,
                                                userList : that.userList,
-                                               policyType      : policyType,
+//                                             policyType      : policyType,
                                                accessTypes : accessType,
                                                rangerServiceDefModel : 
that.rangerServiceDefModel
                                        }).render().el);
@@ -321,43 +209,19 @@ define(function(require){
                },
        
                beforeSave : function(){
-                       var that = this, resources = '';
+                       var that = this, resources = [];
                        
this.model.set('service',this.rangerService.get('name'));
-                       if(that.rangerService.get('type').toUpperCase() == 
XAEnums.ServiceType.Service_HDFS.label.toUpperCase())
-                               resources = this.model.get('path').split(',');
-                       else if(that.rangerService.get('type').toUpperCase() == 
XAEnums.ServiceType.Service_HIVE.label.toUpperCase()){
-                               resources = "/"+this.model.get('database');
-                               resources += 
!_.isEmpty(this.model.get('table')) ? "/"+this.model.get('table') : '';
-                               resources += 
!_.isEmpty(this.model.get('column')) ? "/"+this.model.get('column') : '';
-                               resources = resources.split(',');
-                       }else if(that.rangerService.get('type').toUpperCase() 
== XAEnums.ServiceType.Service_HBASE.label.toUpperCase()){
-                               resources = "/"+this.model.get('table');
-                               resources += 
!_.isEmpty(this.model.get('column-family')) ? 
"/"+this.model.get('column-family') : '';
-                               resources += 
!_.isEmpty(this.model.get('column')) ? "/"+this.model.get('column') : '';
-                               resources = resources.split(',');
-                       }else if(that.rangerService.get('type').toUpperCase() 
== XAEnums.ServiceType.Service_KNOX.label.toUpperCase()){
-                               resources = 
"/"+this.model.get('topology')+"/"+this.model.get('service');
-                               resources = resources.split(',');
-                       }else if(that.rangerService.get('type').toUpperCase() 
== XAEnums.ServiceType.Service_STORM.label.toUpperCase()){
-                               resources = "/"+this.model.get('topology')
-                               resources = resources.split(',');
-                       }
-                       var rPolicyResourceList = new 
RangerPolicyResourceList();
-                       _.each(resources, function(val){
-                               var rPolicyResource = new 
RangerPolicyResource();
-                               
rPolicyResource.set('type',that.rangerService.get('type'));
-                               rPolicyResource.set('value',val);
-                               
rPolicyResource.set('isRecursive',that.model.get('isRecursive'))
-                               rPolicyResource.set('isExcludes',null)
-                               rPolicyResourceList.add(rPolicyResource);
+                       var resources = {};
+                       
_.each(this.rangerServiceDefModel.get('resources'),function(obj){
+                               if(!_.isNull(obj)){
+                                       var rPolicyResource = new 
RangerPolicyResource();
+                                       
rPolicyResource.set('values',that.model.get(obj.name).split(','));
+                                       
rPolicyResource.set('isRecursive',that.model.get('isRecursive'))
+                                       resources[obj.name] = rPolicyResource;
+                                       that.model.unset(obj.name);
+                               }
                        });
-                       
-                       
-                       
-                       
-//                     
this.model.set('isEnabled',this.model.get('isEnabled')+"");
-//                     
this.model.set('isAuditEnabled',this.model.get('isAuditEnabled')+"");
-                       this.model.set('resources',rPolicyResourceList);
+                       this.model.set('resources',resources);
                        this.model.unset('isRecursive');
                        this.model.unset('path');
                        
@@ -393,6 +257,11 @@ define(function(require){
                        }, this);
                        this.model.set('policyItems', policyItemList)
                        
+                       //Unset attrs which are not needed 
+                       
_.each(this.model.attributes.resources,function(obj,key){
+                               this.model.unset(key, obj.values.toString())
+                       },this)
+                       
                },
                /** all post render plugin initialization */
                initializePathPlugins: function(){

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1f458f00/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 b0f3809..2f4ab67 100644
--- 
a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js
+++ 
b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js
@@ -32,6 +32,7 @@ define(function(require){
        var XATableLayout       = require('views/common/XATableLayout');
        var localization        = require('utils/XALangSupport');
        var vFolderInfo = require('views/folders/FolderInfo');
+       var RangerServiceDef    = require('models/RangerServiceDef');
        var RangerPolicyTableLayoutTmpl = 
require('hbs!tmpl/policies/RangerPolicyTableLayout_tmpl');
 
        require('backgrid-filter');
@@ -99,6 +100,7 @@ define(function(require){
                                        assetId : this.assetModel.id
                        };*/
                        this.bindEvents();
+                       this.initializeServiceDef();
 //                     this.isSysAdmin = SessionMgr.isSystemAdmin();
                },
 
@@ -110,7 +112,14 @@ define(function(require){
                        //this.listenTo(this.collection, "sync", this.render, 
this);
                        //
                },
-
+               initializeServiceDef : function(){
+                       this.rangerServiceDefModel      = new 
RangerServiceDef();
+                       this.rangerServiceDefModel.url = 
"service/plugins/definitions/name/"+this.rangerService.get('type');
+                       this.rangerServiceDefModel.fetch({
+                               cache : false,
+                               async : false
+                       })
+               },
                /** on render callback */
                onRender: function() {
 //                     this.initializePlugins();
@@ -148,17 +157,40 @@ define(function(require){
                                        editable: false,
                                        sortable : false
                                },      
-                               resources : {
+               /*              database : {
+                                       cell : "html",
+                                       label   : 
localization.tt("lbl.database"),
+                                       editable: false,
+                                       sortable : false,
+                                       formatter: _.extend({}, 
Backgrid.CellFormatter.prototype, {
+                                               fromRaw: function 
(rawValue,model) {
+                                                       rawValue = 
model.get('resources')
+                                                       var name=''
+                                                       _.each(rawValue, 
function(obj){
+                                                               
if(!_.isUndefined(obj.values)) 
+                                                                       name += 
obj.values.toString();
+                                                       });
+                                                       return name;
+                                               }
+                                       })
+                               },*/
+                       /*      resources : {
                                        cell : "html",
                                        label   : 
localization.tt("lbl.resourcePath"),
                                        editable: false,
                                        sortable : false,
                                        formatter: _.extend({}, 
Backgrid.CellFormatter.prototype, {
                                                fromRaw: function (rawValue) {
-                                                       return _.map(rawValue, 
function(resource){ return resource.value;}).toString();
+                                                       console.log(rawValue)
+                                                       var name=''
+                                                       _.each(rawValue, 
function(obj){
+                                                               
if(!_.isUndefined(obj.values)) 
+                                                                       name += 
obj.values.toString();
+                                                       });
+                                                       return name;
                                                }
                                        })
-                               },
+                               },*/
                                isEnabled:{
                                        label:localization.tt('lbl.status'),
                                        cell :"html",
@@ -292,6 +324,22 @@ define(function(require){
                                }
 */                             
                        };
+                       _.each(this.rangerServiceDefModel.get('resources'), 
function(obj){
+                               if(!_.isUndefined(obj) && !_.isNull(obj))
+                                        cols[obj.name]={
+                                                       cell : "html",
+                                                       label   : 
localization.tt("lbl."+obj.name),
+                                                       editable: false,
+                                                       sortable : false,
+                                                       formatter: _.extend({}, 
Backgrid.CellFormatter.prototype, {
+                                                               fromRaw: 
function (rawValue,model) {
+                                                                       
rawValue = model.get('resources')
+                                                                       return 
rawValue[obj.name].values.toString();
+                                                               }
+                                                       })
+                                               };
+
+                       });
                        return this.collection.constructor.getTableCols(cols, 
this.collection);
                },
                onDelete :function(e){

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1f458f00/security-admin/src/main/webapp/scripts/views/policies/UserPermList.js
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/scripts/views/policies/UserPermList.js 
b/security-admin/src/main/webapp/scripts/views/policies/UserPermList.js
index f7879ad..fe51116 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/UserPermList.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/UserPermList.js
@@ -33,12 +33,12 @@ define(function(require) {
        
        var UserPermissionItem = Backbone.Marionette.ItemView.extend({
                _msvName : 'UserPermissionItem',
-               template : require('hbs!tmpl/common/UserPermissionItem'),
+               template : require('hbs!tmpl/policies/UserPermItem'),
                tagName : 'tr',
                templateHelpers : function(){
                                                
                        return {
-                               permissions     : this.getPerms(),
+                               permissions     : this.accessTypes,
                                policyKnox              : this.policyType == 
XAEnums.ServiceType.Service_KNOX.value ? true :false,
 //                             policyStorm     : this.policyType == 
XAEnums.ServiceType.Service_STORM.value ? true :false,
                           isModelNew           : !this.model.has('editMode'),
@@ -74,6 +74,11 @@ define(function(require) {
                onRender : function() {
                        var that = this;
                        
+                       this.accessItems = _.map(this.accessTypes, 
function(perm){ 
+                               if(!_.isUndefined(perm)) 
+                                       return {'type':perm.label,isAllowed : 
false}
+                       });
+                       
                        if(this.model.get('userName') != undefined){
                                
this.ui.selectUsers.val(this.model.get('userName').split(','));
                        }
@@ -83,8 +88,10 @@ define(function(require) {
                        
                        if(this.model.has('editMode') && 
this.model.get('editMode')){
                                _.each(this.model.get('accesses'), function(p){
-                                       if(p.value)
+                                       if(p.isAllowed){
                                                
this.$el.find('input[data-name="' + p.type + '"]').attr('checked', 'checked');
+                                               
_.each(this.accessItems,function(obj){ if(obj.type == p.type) 
obj.isAllowed=true;})
+                                       }
                                },this);
                        }
                        if(this.policyType == 
XAEnums.AssetType.ASSET_STORM.value)
@@ -93,7 +100,6 @@ define(function(require) {
                        this.createSelectUserDropDown();
                        this.userDropDownChange();
                        
-                       this.accessItems = _.map(this.getPerms(), 
function(perm){ if(!_.isUndefined(perm)) return {'type':perm.label,'value': 
false}});
                },
                checkDirtyFieldForDropDown : function(e){
                        //that.model.has('groupId')
@@ -131,9 +137,9 @@ define(function(require) {
                                var $checkbox = $el.find('input');
                                $checkbox.is(':checked') ? 
$checkbox.prop('checked',false) : $checkbox.prop('checked',true);  
                        }
-                       var curPerm = $el.find('input').data('id');
+//                     var curPerm = $el.find('input').data('id');
                        var curPermName = $el.find('input').data('name');
-                       if(!_.isUndefined(curPerm)){
+                       if(!_.isUndefined(curPermName)){
                                var perms = [];
                                if(this.model.has('accesses')){
                                        
if(_.isArray(this.model.get('accesses')))
@@ -144,16 +150,16 @@ define(function(require) {
                                
                                
                                
if($el.find('input[type="checkbox"]').is(':checked')){
-                                       _.each(that.accessItems, function(obj){ 
if(obj.type == curPermName) obj.value = true });
-                                       if(curPerm == 
XAEnums.XAPermType.XA_PERM_TYPE_ADMIN.value){
-                                               
$el.parent().find('input[type="checkbox"]:not(:checked)[data-id!="'+curPerm+'"]').map(function(){
-                                                       
_.each(that.accessItems, function(obj){ if(obj.type == $(this).data('name')) 
obj.value = true }, this);
+                                       _.each(that.accessItems, function(obj){ 
if(obj.type == curPermName) obj.isAllowed = true });
+                                       /*if(curPermName == 
XAEnums.XAPermType.XA_PERM_TYPE_ADMIN.label){
+                                               
$el.parent().find('input[type="checkbox"]:not(:checked)[data-name!="'+curPermName+'"]').map(function(){
+                                                       
_.each(that.accessItems, function(obj){ if(obj.type == $(this).data('name')) 
obj.isAllowed = true }, this);
                                                });
                                                //      
this.model.set('_vPermList', perms);
                                                
$el.parent().find('input[type="checkbox"]').prop('checked',true);
-                                       }
+                                       }*/
                                } else {
-                                       _.each(that.accessItems, function(obj){ 
if(obj.type == curPermName ) obj.value = false }, this);
+                                       _.each(that.accessItems, function(obj){ 
if(obj.type == curPermName ) obj.isAllowed = false }, this);
                                }
 //                             this.checkDirtyFieldForCheckBox(perms);
                                if(!_.isEmpty(that.accessItems)){
@@ -345,10 +351,6 @@ define(function(require) {
                                });
                        });
                },
-               getPerms : function(){
-                       var permList = _.map(this.accessTypes,function(type){ 
return type.label});
-                       return _.map(permList, function(perm){ return 
_.findWhere(XAEnums.XAPermType,{label:perm})})
-               }
 
        });
 

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1f458f00/security-admin/src/main/webapp/scripts/views/service/ServiceCreate.js
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/scripts/views/service/ServiceCreate.js 
b/security-admin/src/main/webapp/scripts/views/service/ServiceCreate.js
index e86d6ab..6b7f3ea 100644
--- a/security-admin/src/main/webapp/scripts/views/service/ServiceCreate.js
+++ b/security-admin/src/main/webapp/scripts/views/service/ServiceCreate.js
@@ -89,7 +89,7 @@ define(function(require){
                                this.setupModel();
                        }*/
                        if(!this.model.isNew()){
-                               
_.each(JSON.parse(this.model.attributes.configs),function(name, value){
+                               
_.each(this.model.attributes.configs,function(name, value){
                                        this.model.set(value,name)
                                },this);
                        }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1f458f00/security-admin/src/main/webapp/scripts/views/service/ServiceForm.js
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/scripts/views/service/ServiceForm.js 
b/security-admin/src/main/webapp/scripts/views/service/ServiceForm.js
index 6027b1e..24b174c 100644
--- a/security-admin/src/main/webapp/scripts/views/service/ServiceForm.js
+++ b/security-admin/src/main/webapp/scripts/views/service/ServiceForm.js
@@ -25,6 +25,7 @@ define(function(require){
     
        var XAEnums                     = require('utils/XAEnums');
        var localization        = require('utils/XALangSupport');
+       var BackboneFormDataType        = 
require('models/BackboneFormDataType');
 
        require('backbone-forms');
        require('backbone-forms.list');
@@ -78,36 +79,8 @@ define(function(require){
 
                        var attrs = 
_.pick(_.result(this.rangerServiceDefModel,'schemaBase'), 'name', 
'description', 'isEnabled', 'type');
                        var that = this;
-                       
_.each(this.rangerServiceDefModel.get('configs'),function(v,k){ 
-                               if (v != null) {
-
-                                       var formObj = {};
-                                       var enumObj = 
_.find(that.rangerServiceDefModel.get('enums'), function(e){ return e && e.name 
== v.type;});
-                                       if (enumObj !== undefined ){
-                                               formObj.type = 'Select';
-                                               formObj.options = 
_.pluck(_.compact(enumObj.elements),'label'); 
-                                       } else {
-                                               switch(v.type){
-                                                       case 'string' : 
formObj.type = 'Text'; break;
-                                                       case 'bool' : 
formObj.type = 'Checkbox'; formObj.options = { y: 'Yes', n: 'No' }; break;
-                                                       case 'int' : 
formObj.type = 'Number'; break;
-                                                       default : formObj.type 
= 'Text'; break;
-                                               }       
-
-
-                                       }
-                                       formObj.title = v.label || v.name;
-                                       formObj.validators = [];
-                                       if (_.has(v,'mandatory') && 
v.mandatory){
-                                               
formObj.validators.push('required');
-                                               formObj.title = formObj.title 
+" *"
-                                       }
-                                       formObj['class'] = 'serviceConfig';
-                                       var name = v.name;
-                                       attrs[name] = formObj;
-                               }
-                       });
-                       return attrs;
+                       var formDataType = new BackboneFormDataType();
+                       return 
formDataType.getFormElements(this.rangerServiceDefModel.get('configs'),this.rangerServiceDefModel.get('enums'),
 attrs, this);
                },
 
                /** on render callback */
@@ -156,9 +129,9 @@ define(function(require){
                                        that.model.unset(obj.name);
                                }
                        });
-                       //this.model.set('configs',JSON.stringify(config));
+//                     this.model.set('configs',JSON.stringify(config));
                        this.model.set('configs',config);
-
+                       
                        //Set service type
                        
this.model.set('type',this.rangerServiceDefModel.get('name'))
                        /*_.each(XAEnums.AssetType, function(asset){
@@ -174,7 +147,7 @@ define(function(require){
                        
                        //Remove unwanted attributes from model
                        if(!this.model.isNew()){
-                               
_.each(JSON.parse(this.model.attributes.configs),function(value, name){
+                               _.each(this.model.attributes.configs, 
function(value, name){
                                        this.model.unset(name)
                                },this);
                        }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1f458f00/security-admin/src/main/webapp/templates/policies/GroupPermItem.html
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/templates/policies/GroupPermItem.html 
b/security-admin/src/main/webapp/templates/policies/GroupPermItem.html
index 08155e1..a53f7b6 100644
--- a/security-admin/src/main/webapp/templates/policies/GroupPermItem.html
+++ b/security-admin/src/main/webapp/templates/policies/GroupPermItem.html
@@ -40,7 +40,7 @@
 {{/if}}
 {{#each permissions}}
        <td style="cursor:pointer;">
-               <input data-id="{{./this.value}}" data-name="{{./this.label}}" 
type="checkbox">
+               <input data-name="{{./this.label}}" type="checkbox">
        </td>
 {{/each}}
        

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/1f458f00/security-admin/src/main/webapp/templates/policies/UserPermItem.html
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/templates/policies/UserPermItem.html 
b/security-admin/src/main/webapp/templates/policies/UserPermItem.html
index 481ee61..b7bbad4 100644
--- a/security-admin/src/main/webapp/templates/policies/UserPermItem.html
+++ b/security-admin/src/main/webapp/templates/policies/UserPermItem.html
@@ -39,7 +39,7 @@
 {{/if}}
 {{#each permissions}}
                <td style="cursor:pointer;">
-                       <input data-id="{{./this.value}}" type="checkbox">
+                       <input data-name="{{./this.label}}" type="checkbox">
                </td>
 {{/each}}
 

Reply via email to