Repository: incubator-ranger
Updated Branches:
  refs/heads/tag-policy 5a022141c -> 3ffde5de3


Added Tag based policy tab and also provided tag option for existing services.

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/3ffde5de
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/3ffde5de
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/3ffde5de

Branch: refs/heads/tag-policy
Commit: 3ffde5de3eb079d48593a34027d0556f7d38a4d6
Parents: 5a02214
Author: Gautam Borad <[email protected]>
Authored: Tue Jun 2 18:20:27 2015 +0530
Committer: Madhan Neethiraj <[email protected]>
Committed: Tue Jun 2 09:14:21 2015 -0700

----------------------------------------------------------------------
 .../service-defs/ranger-servicedef-_tag_.json   | 22 +---------
 .../webapp/scripts/controllers/Controller.js    | 40 +++++++++++------
 .../main/webapp/scripts/models/RangerPolicy.js  |  4 ++
 .../webapp/scripts/models/RangerServiceDef.js   | 45 ++++++++++++++++++++
 .../src/main/webapp/scripts/modules/XALinks.js  |  7 ++-
 .../main/webapp/scripts/modules/XAOverrides.js  |  2 +-
 .../scripts/modules/globalize/message/en.js     |  3 +-
 .../src/main/webapp/scripts/routers/Router.js   |  5 ++-
 .../src/main/webapp/scripts/utils/XAEnums.js    |  3 +-
 .../src/main/webapp/scripts/utils/XAGlobals.js  |  3 +-
 .../scripts/views/policies/RangerPolicyForm.js  | 10 ++++-
 .../views/policies/RangerPolicyTableLayout.js   |  3 ++
 .../views/policymanager/ServiceLayout.js        |  9 +++-
 .../scripts/views/service/ServiceCreate.js      | 20 +++++----
 .../webapp/scripts/views/service/ServiceForm.js | 31 ++++++++------
 .../webapp/templates/common/TopNav_tmpl.html    |  6 ++-
 .../main/webapp/templates/helpers/XAHelpers.js  |  1 +
 .../templates/service/ServiceForm_tmpl.html     | 35 ++++++++-------
 18 files changed, 166 insertions(+), 83 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/3ffde5de/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 e0ae0bc..0fa5577 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
@@ -37,27 +37,7 @@
 
   "configs":
   [
-    {
-      "itemId": 1,
-      "name": "username",
-      "type": "string",
-      "mandatory": false,
-      "validationRegEx":"",
-      "validationMessage": "",
-      "uiHint":"",
-      "label": "Username"
-    },
-
-    {
-      "itemId": 2,
-      "name": "password",
-      "type": "password",
-      "mandatory": false,
-      "validationRegEx":"",
-      "validationMessage": "",
-      "uiHint":"",
-      "label": "Password"
-    }
+  
   ],
 
   "enums":

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/3ffde5de/security-admin/src/main/webapp/scripts/controllers/Controller.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/controllers/Controller.js 
b/security-admin/src/main/webapp/scripts/controllers/Controller.js
index 0819f9e..7b9cc39 100755
--- a/security-admin/src/main/webapp/scripts/controllers/Controller.js
+++ b/security-admin/src/main/webapp/scripts/controllers/Controller.js
@@ -221,24 +221,38 @@ define(function(require) {
           //************** Generic design Related *********************/
           /************************************************************/
 
-          serviceManagerAction :function(){
+          serviceManagerAction :function(type){
                   MAppState.set({ 'currentTab' : 
XAGlobals.AppTabs.AccessManager.value });
-                  console.log('Policy Manager action called..');
+                  var XAUtil                           = 
require('utils/XAUtils');
+                  var XAEnums                          = 
require('utils/XAEnums');
                   var view                             = 
require('views/policymanager/ServiceLayout');
                   var RangerServiceDefList     = 
require('collections/RangerServiceDefList');
+                  var RangerServiceDef         = 
require('models/RangerServiceDef');
+                  
                   var collection                       = new 
RangerServiceDefList();
                   collection.queryParams.sortBy = 'serviceTypeId';
-                  collection.fetch({
-                          cache : false,
-                          async:false
-                  }).done(function(){
-                          if(App.rContent.currentView) 
App.rContent.currentView.close();
-                          //TODO FROM SERVER SIDE IT SHOULD GIVE SORTBY `ID` 
BY DEFAULT
-//                        collection = collection.sort()
-                          App.rContent.show(new view({
-                                  collection : collection
-                          }));
-                  });
+                  
+                  if(type == 'tag'){
+                          var tagServiceDef    = new RangerServiceDef();
+                          tagServiceDef.url    = 
XAUtil.getRangerServiceDef(XAEnums.ServiceType.SERVICE_TAG.label)
+                          tagServiceDef.fetch({
+                                  cache : false,
+                                  async:false
+                          })
+                          collection.add(tagServiceDef);
+                  }else{
+                          collection.fetch({
+                                  cache : false,
+                                  async:false
+                          });
+                          var coll = collection.filter(function(model){ return 
model.get('name') != XAEnums.ServiceType.SERVICE_TAG.label})
+                          collection.reset(coll)
+                  }
+//                if(App.rContent.currentView) 
App.rContent.currentView.close();
+                  App.rContent.show(new view({
+                          collection : collection,
+                          type : type
+                  }));
           },
 
           serviceCreateAction :function(serviceTypeId){

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/3ffde5de/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 46e498b..feacfec 100644
--- a/security-admin/src/main/webapp/scripts/models/RangerPolicy.js
+++ b/security-admin/src/main/webapp/scripts/models/RangerPolicy.js
@@ -80,6 +80,10 @@ define(function(require){
                                        offText         : 'NO',
                                        switchOn        : true
                                },
+                               policyType : {
+                                       type            : 'Checkbox',
+                                       title           : 
localization.tt("lbl.isFinalPolicy"),
+                               },
                        });
                },
 

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/3ffde5de/security-admin/src/main/webapp/scripts/models/RangerServiceDef.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/models/RangerServiceDef.js 
b/security-admin/src/main/webapp/scripts/models/RangerServiceDef.js
index f76938d..8aa38f3 100644
--- a/security-admin/src/main/webapp/scripts/models/RangerServiceDef.js
+++ b/security-admin/src/main/webapp/scripts/models/RangerServiceDef.js
@@ -75,9 +75,54 @@ define(function(require){
                                                var nvPairs = 
XAUtils.enumToSelectPairs(activeStatus);
                                                callback(_.sortBy(nvPairs, 
function(n){ return !n.val; }));
                                        }
+                               },
+                               tagService : {
+                                       type : 'Select2Remote',
+                                       title : 'Select Tag Service',
+                                       pluginAttr : this.getPluginAttr(),
+                                       options    : function(callback, editor){
+                           callback();
+                       }
+                                       
                                }
                        });
                },
+               getPluginAttr : function(){
+                       return { closeOnSelect : true,
+                       placeholder : 'Select Tag Service',
+                       maximumSelectionSize : 1,
+                       width :'220px',
+                       tokenSeparators: [",", " "],
+                       allowClear: true,
+                       initSelection : function (element, callback) {
+                               callback( { id:element.val(), 
text:element.val() })
+                       },
+                       ajax: { 
+                               url: "service/plugins/services",
+                               dataType: 'json',
+                               data: function (term, page) {
+                                       return { name : term, serviceType : 
'_tag_' };
+                               },
+                               results: function (data, page) { 
+                                       var results = [];
+                                       if(data.resultSize != "0"){
+                                               results = 
data.services.map(function(m, i){     return {id : m.name, text: m.name};     
});
+                                               return {results : results};
+                                       }
+                                       return {results : results};
+                               }
+                       },      
+                       formatResult : function(result){
+                               return result.text;
+                       },
+                       formatSelection : function(result){
+                               return result.text;
+                       },
+                       formatNoMatches: function(result){
+                               return 'No tag service found.';
+                       }
+                       };
+               },
 
                /** This models toString() */
                toString : function(){

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/3ffde5de/security-admin/src/main/webapp/scripts/modules/XALinks.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/modules/XALinks.js 
b/security-admin/src/main/webapp/scripts/modules/XALinks.js
index efa3454..acb1b01 100755
--- a/security-admin/src/main/webapp/scripts/modules/XALinks.js
+++ b/security-admin/src/main/webapp/scripts/modules/XALinks.js
@@ -50,7 +50,12 @@ define(function(require) {
                                title: 'h.repositoryManager'
                        },
                        ServiceManager :{
-                               href : '#!/policymanager', 
+                               href : '#!/policymanager/resource', 
+                               text : 'h.serviceManager',
+                               title: 'h.serviceManager'
+                       },
+                       TagBasedServiceManager :{
+                               href : '#!/policymanager/tag', 
                                text : 'h.serviceManager',
                                title: 'h.serviceManager'
                        },

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/3ffde5de/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 b7af13a..9bc1533 100644
--- a/security-admin/src/main/webapp/scripts/modules/XAOverrides.js
+++ b/security-admin/src/main/webapp/scripts/modules/XAOverrides.js
@@ -267,7 +267,7 @@
         
                render: function() {
                        var self = this;
-                       this.setOptions(this.schema.options);
+//                     this.setOptions(this.schema.options);
                        setTimeout(function () {
                            self.$el.select2(self.pluginAttr);
                        },0);                   

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/3ffde5de/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 fa02166..c427c41 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
@@ -227,7 +227,8 @@ define(function(require) {
                                createService                                   
: 'Create Service',
                                editService                                     
        : 'Edit Service',
                                serviceDetails                                  
: 'Service Details',
-                               serviceName                                     
        : 'Service Name'
+                               serviceName                                     
        : 'Service Name',
+                               isFinalPolicy                                   
: 'Is Final Policy'
                        },
                        btn : {
                                add                                             
        : 'Add',

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/3ffde5de/security-admin/src/main/webapp/scripts/routers/Router.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/routers/Router.js 
b/security-admin/src/main/webapp/scripts/routers/Router.js
index 127b418..d8aea1b 100644
--- a/security-admin/src/main/webapp/scripts/routers/Router.js
+++ b/security-admin/src/main/webapp/scripts/routers/Router.js
@@ -30,8 +30,9 @@ function(Backbone, Marionette, localization, MAppState, 
XAUtil){
        return Backbone.Marionette.AppRouter.extend({
                /** Backbone routes hash */
                appRoutes: {
-                       ""                                                      
: "postLoginDefaultView",//"dashboardAction",
-                       "!/policymanager"                       : 
"serviceManagerAction",
+                       ""                                                      
                : "postLoginDefaultView",//"dashboardAction",
+                       "!/policymanager/:resource"                     : 
"serviceManagerAction",
+                       "!/policymanager/:tag"                          : 
"serviceManagerAction",
 
                        /****** Analytics Report related **********************/
                        "!/reports/userAccess"          : 
"userAccessReportAction",

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/3ffde5de/security-admin/src/main/webapp/scripts/utils/XAEnums.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/utils/XAEnums.js 
b/security-admin/src/main/webapp/scripts/utils/XAEnums.js
index 98cc0c8..51cf608 100644
--- a/security-admin/src/main/webapp/scripts/utils/XAEnums.js
+++ b/security-admin/src/main/webapp/scripts/utils/XAEnums.js
@@ -116,7 +116,8 @@ define(function(require) {
                Service_HIVE:{value:2, label:'hive', 
rbkey:'xa.enum.AssetType.ASSET_HIVE', tt: 'lbl.AssetType_ASSET_HIVE'},
                Service_HBASE:{value:3, label:'hbase', 
rbkey:'xa.enum.AssetType.ASSET_HBASE', tt: 'lbl.AssetType_ASSET_HBASE'},
                Service_KNOX:{value:4, label:'knox', 
rbkey:'xa.enum.AssetType.ASSET_KNOX', tt: 'lbl.AssetType_ASSET_KNOX'},
-               Service_STORM:{value:5, label:'storm', 
rbkey:'xa.enum.AssetType.ASSET_STORM', tt: 'lbl.AssetType_ASSET_STORM'}
+               Service_STORM:{value:5, label:'storm', 
rbkey:'xa.enum.AssetType.ASSET_STORM', tt: 'lbl.AssetType_ASSET_STORM'},
+               SERVICE_TAG:{value:6, label:'_tag_', 
rbkey:'xa.enum.ServiceType.SERVICE_TAG', tt: 'lbl.ServiceType_SERVICE_TAG'}
        });
 
        XAEnums.AuthStatus = mergeParams(XAEnums.AuthStatus, {

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/3ffde5de/security-admin/src/main/webapp/scripts/utils/XAGlobals.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/utils/XAGlobals.js 
b/security-admin/src/main/webapp/scripts/utils/XAGlobals.js
index 21b3cb4..31f7fa3 100644
--- a/security-admin/src/main/webapp/scripts/utils/XAGlobals.js
+++ b/security-admin/src/main/webapp/scripts/utils/XAGlobals.js
@@ -64,7 +64,8 @@ define(function(require){
        
        XAGlobals.ListOfModuleActions = {
                        'Access Manager' : { 'Resource Based Policies' : 
['serviceManagerAction','serviceCreateAction','serviceEditAction', 
'policyManageAction','RangerPolicyCreateAction','RangerPolicyEditAction'],
-                                                                'Reports' : 
['userAccessReportAction'] },
+                                                                'Reports' : 
['userAccessReportAction'],
+                                                               'Tag Based 
Policies' : ['serviceManagerAction','serviceCreateAction','serviceEditAction', 
'policyManageAction','RangerPolicyCreateAction','RangerPolicyEditAction']},
                        'Audit'                  : 
['auditReportAction','loginSessionDetail'],
                        'Encryption'     : {'Key Manager' : 
['kmsManagerAction','kmsKeyCreateAction'] },
                        'Settings'               : {'Users/Groups' : 
['userManagerAction','userCreateAction','userEditAction','groupCreateAction','groupEditAction'],

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/3ffde5de/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 2396955..bbb38f5 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
@@ -88,7 +88,7 @@ define(function(require){
                getSchema : function(){
                        var attrs = {};
                        var basicSchema = ['name','isEnabled']
-                       var schemaNames = ['description', 'isAuditEnabled'];
+                       var schemaNames = this.getPolicyBaseFieldNames();
                        
                        var formDataType = new BackboneFormDataType();
                        attrs = 
formDataType.getFormElements(this.rangerServiceDefModel.get('resources'),this.rangerServiceDefModel.get('enums'),
 attrs, this);
@@ -262,6 +262,10 @@ define(function(require){
                                this.model.unset(key, obj.values.toString())
                        },this)*/
                        
+                       if(!_.isUndefined(this.model.get('policyType'))){
+                               
this.model.set('policyType',this.model.get('policyType') ? 1 : 0)
+                       }
+                       
                },
                setPermissionsToColl : function(list, policyItemList) {
                        list.each(function(m){
@@ -551,6 +555,10 @@ define(function(require){
                        }
                        return obj;
                },
+               getPolicyBaseFieldNames : function(){
+                        var fields = ['description', 
'isAuditEnabled','policyType'];
+                        return this.rangerServiceDefModel.get('name') == 
XAEnums.ServiceType.SERVICE_TAG.label ?  fields : 
fields.slice(0,fields.indexOf("policyType"));
+               }
        });
 
        return RangerPolicyForm;

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/3ffde5de/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 9a6b92f..e306ec4 100644
--- 
a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js
+++ 
b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js
@@ -61,6 +61,9 @@ define(function(require){
                },
         
        breadCrumbs : function(){
+               if(this.rangerService.get('type') == 
XAEnums.ServiceType.SERVICE_TAG.label){
+                       return 
[XALinks.get('TagBasedServiceManager'),XALinks.get('ManagePolicies',{model : 
this.rangerService})];
+               }
                return 
[XALinks.get('ServiceManager'),XALinks.get('ManagePolicies',{model : 
this.rangerService})];
 //             return [];
                },        

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/3ffde5de/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js 
b/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js
index 040cda7..f7c72dc 100644
--- 
a/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js
+++ 
b/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js
@@ -46,7 +46,12 @@ define(function(require){
                                services : groupedServices
                        };
                },
-       breadCrumbs :[XALinks.get('ServiceManager')],
+       breadCrumbs :function(){
+               if(this.type == "tag"){
+                       return [XALinks.get('TagBasedServiceManager')];
+               }
+               return [XALinks.get('ServiceManager')];
+       },
 
                /** Layout sub regions */
        regions: {},
@@ -69,7 +74,7 @@ define(function(require){
                initialize: function(options) {
                        console.log("initialized a Servicemanagerlayout 
Layout");
                        this.services = new RangerServiceList();        
-                       _.extend(this, _.pick(options, 'collection'));
+                       _.extend(this, _.pick(options, 'collection','type'));
                        this.bindEvents();
                        this.initializeServices();
                },

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/3ffde5de/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 01141b6..b14179e 100644
--- a/security-admin/src/main/webapp/scripts/views/service/ServiceCreate.js
+++ b/security-admin/src/main/webapp/scripts/views/service/ServiceCreate.js
@@ -48,10 +48,11 @@ define(function(require){
                },
         
                breadCrumbs :function(){
+                       var name  = this.rangerServiceDefModel.get('name') != 
XAEnums.ServiceType.SERVICE_TAG.label ? 'ServiceManager' : 
'TagBasedServiceManager'; 
                        if(this.model.isNew())
-                               return [XALinks.get('ServiceManager'), 
XALinks.get('ServiceCreate', {model:this.model})];
+                               return [XALinks.get(name), 
XALinks.get('ServiceCreate', {model:this.model})];
                        else
-                               return [XALinks.get('ServiceManager'), 
XALinks.get('ServiceEdit',{model:this.model})];
+                               return [XALinks.get(name), 
XALinks.get('ServiceEdit',{model:this.model})];
                },        
 
                /** Layout sub regions */
@@ -154,13 +155,11 @@ define(function(require){
                                        var msg = that.editService ? 'Service 
updated successfully' :'Service created successfully';
                                        XAUtil.notifySuccess('Success', msg);
                                        
-                                       if(that.editService){
-                                               
App.appRouter.navigate("#!/policymanager",{trigger: true});
+                                       
if(XAEnums.ServiceType.SERVICE_TAG.label == that.model.get('type')){
+                                               
App.appRouter.navigate("#!/policymanager/tag",{trigger: true});
                                                return;
                                        }
-                                       
-                                       
App.appRouter.navigate("#!/policymanager",{trigger: true});
-                                       
+                                       
App.appRouter.navigate("#!/policymanager/resource",{trigger: true});
                                },
                                error: function (model, response, options) {
                                        XAUtil.blockUI('unblock');
@@ -269,7 +268,12 @@ define(function(require){
                },
                onCancel : function(){
                        XAUtil.allowNavigation();
-                       App.appRouter.navigate("#!/policymanager",{trigger: 
true});
+                       if(XAEnums.ServiceType.SERVICE_TAG.label == 
this.model.get('type')){
+                               
App.appRouter.navigate("#!/policymanager/tag",{trigger: true});
+                               return;
+                       }
+                       
App.appRouter.navigate("#!/policymanager/resource",{trigger: true});
+//                     App.appRouter.navigate("#!/policymanager",{trigger: 
true});
                },
                /** on close */
                onClose: function(){

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/3ffde5de/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 a3ac650..da1da83 100644
--- a/security-admin/src/main/webapp/scripts/views/service/ServiceForm.js
+++ b/security-admin/src/main/webapp/scripts/views/service/ServiceForm.js
@@ -83,8 +83,7 @@ define(function(require){
                fields: ['name', 'description', 'isEnabled', 'type','configs', 
'_vPassword'],
 
                schema : function(){
-
-                       var attrs = 
_.pick(_.result(this.rangerServiceDefModel,'schemaBase'), 'name', 
'description', 'isEnabled', 'type');
+                       var attrs = 
_.pick(_.result(this.rangerServiceDefModel,'schemaBase'), 
this.getSerivceBaseFieldNames());
                        var that = this;
                        var formDataType = new BackboneFormDataType();
                        return 
formDataType.getFormElements(this.rangerServiceDefModel.get('configs'),this.rangerServiceDefModel.get('enums'),
 attrs, this);
@@ -150,18 +149,20 @@ define(function(require){
                        var that = this;
                        //Set configs for service 
                        var config = {};
-                       
_.each(this.rangerServiceDefModel.get('configs'),function(obj){
-                               if(!_.isNull(obj)){
-                                       if(obj.type == 'bool'){
-                                               config[obj.name] = 
that.getBooleanForConfig(obj, that.model);
-                                       }else{
-                                               config[obj.name] = 
that.model.get(obj.name).toString();
+                       
if(!_.isEmpty(this.rangerServiceDefModel.get('configs'))){
+                               
_.each(this.rangerServiceDefModel.get('configs'),function(obj){
+                                       if(!_.isNull(obj)){
+                                               if(obj.type == 'bool'){
+                                                       config[obj.name] = 
that.getBooleanForConfig(obj, that.model);
+                                               }else{
+                                                       config[obj.name] = 
that.model.get(obj.name).toString();
+                                               }
+                                               that.model.unset(obj.name);
                                        }
-                                       that.model.unset(obj.name);
-                               }
-                       });
-                       this.extraConfigColl.each(function(obj){ 
config[obj.get('name')] = obj.get('value');})
-                       this.model.set('configs',config);
+                               });
+                               this.extraConfigColl.each(function(obj){ 
config[obj.get('name')] = obj.get('value');})
+                               this.model.set('configs',config);
+                       }
                        
                        //Set service type
                        
this.model.set('type',this.rangerServiceDefModel.get('name'))
@@ -200,6 +201,10 @@ define(function(require){
                                return subType[1].substr(0, subType[0].length - 
5);
                        }
                },
+               getSerivceBaseFieldNames : function(){
+                        var fields = ['name', 'description', 
'isEnabled','tagService']
+                        return this.rangerServiceDefModel.get('name') == 
XAEnums.ServiceType.SERVICE_TAG.label ? 
fields.slice(0,fields.indexOf("tagService")) : fields;
+               }
        });
 
        return ServiceForm;

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/3ffde5de/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 876f9df..a29423f 100644
--- a/security-admin/src/main/webapp/templates/common/TopNav_tmpl.html
+++ b/security-admin/src/main/webapp/templates/common/TopNav_tmpl.html
@@ -20,12 +20,14 @@
                        <a href="javascript:;" id="nav2"><i 
class="icon-shield"></i>Access Manager</a>
                        <ul class="dropdown-menu">
                                {{#hasAccessToTab 'Resource Based Policies'}}
-                                       <li><a href="#!/policymanager"><i 
class="icon-file"></i>Resource Based Policies</a></li>
+                                       <li><a 
href="#!/policymanager/resource"><i class="icon-file"></i>Resource Based 
Policies</a></li>
                                {{/hasAccessToTab}}
                                {{#hasAccessToTab 'Reports'}}
                                        <li><a href="#!/reports/userAccess"><i 
class="icon-beaker"></i>Reports</a></li>
                                {{/hasAccessToTab}}
-                               <!-- <li><a href="#">Tag Based 
Policies</a></li> -->
+                               {{#hasAccessToTab 'Tag Based Policies'}}
+                               <li><a href="#!/policymanager/tag"><i 
class="icon-tag"></i>Tag Based Policies</a></li>
+                               {{/hasAccessToTab}}
                        </ul>
                </li>
                {{#hasAccessToTab  'Audit'}}

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/3ffde5de/security-admin/src/main/webapp/templates/helpers/XAHelpers.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/templates/helpers/XAHelpers.js 
b/security-admin/src/main/webapp/templates/helpers/XAHelpers.js
index b140608..eec7a95 100644
--- a/security-admin/src/main/webapp/templates/helpers/XAHelpers.js
+++ b/security-admin/src/main/webapp/templates/helpers/XAHelpers.js
@@ -535,6 +535,7 @@
                return str.toUpperCase();
        });
        Handlebars.registerHelper('hasAccessToTab', function(tabName,options) {
+               if(tabName == 'Tag Based Policies') return  options.fn(this); 
                var vxPortalUser = SessionMgr.getUserProfile();
                var userModules = _.pluck(vxPortalUser.get('userPermList'), 
'moduleName');
                var groupModules = 
_.pluck(vxPortalUser.get('groupPermissions'), 'moduleName');

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/3ffde5de/security-admin/src/main/webapp/templates/service/ServiceForm_tmpl.html
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/webapp/templates/service/ServiceForm_tmpl.html 
b/security-admin/src/main/webapp/templates/service/ServiceForm_tmpl.html
index 58f90a5..a6f5ae6 100644
--- a/security-admin/src/main/webapp/templates/service/ServiceForm_tmpl.html
+++ b/security-admin/src/main/webapp/templates/service/ServiceForm_tmpl.html
@@ -21,22 +21,25 @@
                </p>
                <div class="serviceDetail" data-fields={{serviceDetail}}></div>
        </fieldset>
-       <fieldset class="configProp">
-               <p class="formHeader">
-                       Config Properties : 
-               </p>
-               <div class="serviceConfig" data-fields={{serviceConfig}}></div>
-               <div class="extraServiceConfigs" ></div>
-       </fieldset>
-       <div>
-               <div class="control-group field-username hdfs hive knox storm" 
style="display: block;">
-                       <label class="control-label" for="c12_username"></label>
-                       <div class="controls">
-                               <span data-editor="">
-                                       <input data-id="testConn" type="button" 
value="Test Connection" class="btn" />
-                               </span>
-
+       {{#compare this.serviceConfig "neq" ''}}
+               <fieldset class="configProp">
+                       <p class="formHeader">
+                               Config Properties : 
+                       </p>
+                       <div class="serviceConfig" 
data-fields={{serviceConfig}}></div>
+                       <div class="extraServiceConfigs" ></div>
+               </fieldset>
+               
+               <div>
+                       <div class="control-group field-username hdfs hive knox 
storm" style="display: block;">
+                               <label class="control-label" 
for="c12_username"></label>
+                               <div class="controls">
+                                       <span data-editor="">
+                                               <input data-id="testConn" 
type="button" value="Test Connection" class="btn" />
+                                       </span>
+               
+                               </div>
                        </div>
                </div>
-       </div>
+       {{/compare}}
 </form>
\ No newline at end of file

Reply via email to