You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ma...@apache.org on 2015/01/16 16:52:30 UTC

[2/2] incubator-ranger git commit: RANGER-203: UI: Added dynamic policy conditions module, updated url path and done some clean up

RANGER-203: UI: Added dynamic policy conditions module, updated url path and done some clean up


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

Branch: refs/heads/stack
Commit: e551d589bcaf04324d5dcf53bbb83b06c8e572f5
Parents: 87fffe0
Author: Gautam Borad <gb...@gmail.com>
Authored: Fri Jan 16 07:51:50 2015 -0800
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Fri Jan 16 07:51:50 2015 -0800

----------------------------------------------------------------------
 .../plugin/store/ServiceStoreFactory.java       |   2 +-
 .../bower/x-editable/js/bootstrap-editable.js   |   2 +-
 .../webapp/scripts/controllers/Controller.js    | 391 +--------------
 .../scripts/models/BackboneFormDataType.js      |   2 +-
 .../src/main/webapp/scripts/routers/Router.js   |  35 --
 .../src/main/webapp/scripts/utils/XAUtils.js    |  10 +
 .../scripts/views/policies/GroupPermList.js     | 476 -------------------
 .../scripts/views/policies/PermissionList.js    | 473 ++++++++++++++++++
 .../views/policies/RangerPolicyCreate.js        | 167 +------
 .../scripts/views/policies/RangerPolicyForm.js  | 103 ++--
 .../views/policies/RangerPolicyTableLayout.js   | 156 +-----
 .../scripts/views/policies/UserPermList.js      | 440 -----------------
 .../scripts/views/service/ServiceCreate.js      |   4 +-
 .../webapp/scripts/views/service/ServiceForm.js |  42 +-
 .../common/ServiceManagerLayout_tmpl.html       |  18 -
 .../templates/policies/GroupPermItem.html       |  39 --
 .../templates/policies/GroupPermList.html       |  42 --
 .../templates/policies/PermissionItem.html      |  39 ++
 .../templates/policies/PermissionList.html      |  42 ++
 .../policies/RangerPolicyCreate_tmpl.html       |  48 ++
 .../policies/RangerPolicyForm_tmpl.html         |  15 +-
 .../webapp/templates/policies/UserPermItem.html |  53 ---
 .../webapp/templates/policies/UserPermList.html |  42 --
 .../templates/service/ServiceForm_tmpl.html     |   7 +-
 24 files changed, 691 insertions(+), 1957 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/e551d589/plugin-common/src/main/java/org/apache/ranger/plugin/store/ServiceStoreFactory.java
----------------------------------------------------------------------
diff --git a/plugin-common/src/main/java/org/apache/ranger/plugin/store/ServiceStoreFactory.java b/plugin-common/src/main/java/org/apache/ranger/plugin/store/ServiceStoreFactory.java
index a2af931..949792b 100644
--- a/plugin-common/src/main/java/org/apache/ranger/plugin/store/ServiceStoreFactory.java
+++ b/plugin-common/src/main/java/org/apache/ranger/plugin/store/ServiceStoreFactory.java
@@ -68,7 +68,7 @@ public class ServiceStoreFactory {
 		if(useFileStore) {
 			serviceStore = new ServiceFileStore(); // TODO: configurable store implementation
 		} else {
-			RangerRESTClient restClient = new RangerRESTClient("http://172.18.145.30:6080", "");
+			RangerRESTClient restClient = new RangerRESTClient("http://localhost:6080", "");
 			restClient.setBasicAuthInfo("admin", "admin");
 	
 			serviceStore = new ServiceRESTStore(restClient);

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/e551d589/security-admin/src/main/webapp/libs/bower/x-editable/js/bootstrap-editable.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/libs/bower/x-editable/js/bootstrap-editable.js b/security-admin/src/main/webapp/libs/bower/x-editable/js/bootstrap-editable.js
index fe2ae73..86d34da 100644
--- a/security-admin/src/main/webapp/libs/bower/x-editable/js/bootstrap-editable.js
+++ b/security-admin/src/main/webapp/libs/bower/x-editable/js/bootstrap-editable.js
@@ -610,7 +610,7 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc.
     '</form>';
 
     //loading div
-    $.fn.editableform.loading = '<div class="editableform-loading"></div>';
+    $.fn.editableform.loading = '<div class="loading"></div>';
 
     //buttons
     $.fn.editableform.buttons = '<button type="submit" class="editable-submit">ok</button>'+

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/e551d589/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 b58a632..f056d15 100644
--- a/security-admin/src/main/webapp/scripts/controllers/Controller.js
+++ b/security-admin/src/main/webapp/scripts/controllers/Controller.js
@@ -73,381 +73,6 @@ define(function(require) {
 		   });
 	   },
 	   
-	   hdfsManageAction :function(assetId){
-		   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
-		   var view 			= require('views/hdfs/HDFSTableLayout');
-		   var VXResourceList 	= require('collections/VXResourceList');
-		   var VXAsset 		  	= require('models/VXAsset');
-		   var resourceListForAsset = new VXResourceList([],{
-			   queryParams : {
-				   'assetId' : assetId 
-			   }
-		   });
-		   var assetModel = new VXAsset({id:assetId});
-		   assetModel.fetch({cache : true}).done(function(){
-			   App.rContent.show(new view({
-				   collection : resourceListForAsset,
-				   assetModel : assetModel
-			   }));
-			   resourceListForAsset.fetch({
-//				   cache : true
-			   });
-		   });   
-	   },
-
-	   policyCreateAction :function(assetId){
-    	   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
-
-		   var view 			= require('views/policy/PolicyCreate');
-		   var VXResource 		= require('models/VXResource');
-		   var VXResourceList 	= require('collections/VXResourceList');
-		   var VXAsset 	  		= require('models/VXAsset');
-		   
-		   var assetModel 	= new VXAsset({id:assetId});
-		   var resource		= new VXResource();
-		   resource.collection = new VXResourceList([],{
-			   queryParams : {
-				   'assetId' : assetId 
-			   }
-		   });
-		   
-		   assetModel.fetch({cache : true}).done(function(){
-			   App.rContent.show(new view({
-				   model : resource,
-				   assetModel : assetModel
-			   }));
-		   });
-	   },
-	   
-	   policyEditAction :function(){
-    	   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
-		   var view = require('views/policy/PolicyCreate');
-		   App.rContent.show(new view({
-		   }));
-	   },
-
-	   policyViewAction :function(assetId,id){
-    	   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
-
-		   var VXResource 	  = require('models/VXResource');
-		   var VXResourceList = require('collections/VXResourceList');
-		   var VXAsset 	  	  = require('models/VXAsset');
-		   var view = require('views/policy/PolicyCreate');
-		   
-		   var resource = new VXResource({id : id });
-		   resource.collection = new VXResourceList([],{
-			   queryParams : {
-				   'assetId' : assetId 
-			   }
-		   });
-		   
-		   var assetModel = new VXAsset({id:assetId});
-		   resource.fetch({
-//			   cache:true
-			   }).done(function(){
-			   assetModel.fetch({cache : true}).done(function(){
-				   App.rContent.show(new view({
-					   model : resource,
-					   assetModel : assetModel
-				   }));
-			   });
-		   });
-	   },
-	   //************** Policy Related ( HIVE )*********************/
-	   hiveManageAction :function(assetId){
-    	   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
-		   var view 			= require('views/hive/HiveTableLayout');
-		   var VXResourceList 	= require('collections/VXResourceList');
-		   var VXAsset 		  	= require('models/VXAsset');
-		   var resourceListForAsset = new VXResourceList([],{
-			   queryParams : {
-				   'assetId' : assetId 
-			   }
-		   });
-		   var assetModel = new VXAsset({id:assetId});
-		   assetModel.fetch({cache : true}).done(function(){
-			   App.rContent.show(new view({
-				   collection : resourceListForAsset,
-				   assetModel : assetModel
-			   }));
-			   resourceListForAsset.fetch({
-//				   cache : true
-			   });
-		   });   
-	   },
-	   hivePolicyCreateAction :function(assetId){
-    	   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
-		   var view 			= require('views/hive/HivePolicyCreate');
-		   var VXResource 		= require('models/VXResource');
-		   var VXResourceList 	= require('collections/VXResourceList');
-		   var VXAsset 		  	= require('models/VXAsset');
-		   
-		   var assetModel = new VXAsset({id:assetId});
-		   var resource	  = new VXResource();
-		   resource.collection = new VXResourceList([],{
-			   queryParams : {
-				   'assetId' : assetId 
-			   }
-		   });
-		   assetModel.fetch({cache : true}).done(function(){
-			   App.rContent.show(new view({
-				   model : resource,
-			   		assetModel : assetModel
-			   }));
-		   });	   
-	   },
-	   hivePolicyEditAction :function(assetId,id){
-    	   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
-    	   var VXResource 		= require('models/VXResource');
-    	   var VXResourceList 	= require('collections/VXResourceList');
-    	   var VXAsset 		  	= require('models/VXAsset');
-		   var view 			= require('views/hive/HivePolicyCreate');
-		   var resource 		= new VXResource({id : id });
-		   resource.collection = new VXResourceList([],{
-			   queryParams : {
-				   'assetId' : assetId 
-			   }
-		   });
-		   var assetModel = new VXAsset({id:assetId});
-		   resource.fetch({
-//			   cache:true
-			   }).done(function(){
-			   assetModel.fetch({cache : true}).done(function(){
-				   App.rContent.show(new view({
-					   model : resource,
-					   assetModel : assetModel
-				   }));
-			   });
-		   });
-	   },
-	   
-	   //************** Policy Related ( KNOX )*********************/
-	   knoxManageAction :function(assetId){
-    	   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
-		   var view 			= require('views/knox/KnoxTableLayout');
-		   var VXResourceList 	= require('collections/VXResourceList');
-		   var VXAsset 		  	= require('models/VXAsset');
-		   
-		   var resourceListForAsset = new VXResourceList([],{
-			   queryParams : {
-				   'assetId' : assetId 
-			   }
-		   });
-		   var assetModel = new VXAsset({id:assetId});
-		   assetModel.fetch({cache : true}).done(function(){
-			   App.rContent.show(new view({
-				   collection  :resourceListForAsset,
-				   assetModel : assetModel
-			   }));
-			   resourceListForAsset.fetch({
-//				   cache : true
-			   });
-		   });   
-	   },
-	   knoxPolicyCreateAction :function(assetId){
-    	   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
-		   var view 			= require('views/knox/KnoxPolicyCreate');
-		   var VXResource 		= require('models/VXResource');
-		   var VXResourceList 	= require('collections/VXResourceList');
-		   var VXAsset 		  	= require('models/VXAsset');
-		   
-		   var assetModel = new VXAsset({id:assetId});
-		   var resource	  = new VXResource();
-		   resource.collection = new VXResourceList([],{
-			   queryParams : {
-				   'assetId' : assetId 
-			   }
-		   });
-		   assetModel.fetch({cache : true}).done(function(){
-			   App.rContent.show(new view({
-				   model : resource,
-			   		assetModel : assetModel
-			   }));
-		   });	   
-	   },
-	   knoxPolicyEditAction :function(assetId,id){
-    	   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
-    	   var VXResource 		= require('models/VXResource');
-    	   var VXResourceList 	= require('collections/VXResourceList');
-    	   var VXAsset 		  	= require('models/VXAsset');
-		   var view 			= require('views/knox/KnoxPolicyCreate');
-		   var resource 		= new VXResource({id : id });
-		   resource.collection = new VXResourceList([],{
-			   queryParams : {
-				   'assetId' : assetId 
-			   }
-		   });
-		   var assetModel = new VXAsset({id:assetId});
-		   resource.fetch({
-//			   cache:true
-			   }).done(function(){
-			   assetModel.fetch({cache : true}).done(function(){
-				   App.rContent.show(new view({
-					   model : resource,
-					   assetModel : assetModel
-				   }));
-			   });
-		   });
-	   },
-	 //************** Policy Related ( STORM )*********************/
-	   stormManageAction :function(assetId){
-    	   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
-		   var view 			= require('views/storm/StormTableLayout');
-		   var VXResourceList 	= require('collections/VXResourceList');
-		   var VXAsset 		  	= require('models/VXAsset');
-		   
-		   var resourceListForAsset = new VXResourceList([],{
-			   queryParams : {
-				   'assetId' : assetId 
-			   }
-		   });
-		   var assetModel = new VXAsset({id:assetId});
-		   assetModel.fetch({cache : true}).done(function(){
-			   App.rContent.show(new view({
-				   collection  :resourceListForAsset,
-				   assetModel : assetModel
-			   }));
-			   resourceListForAsset.fetch({
-//				   cache : true
-			   });
-		   });   
-	   },
-	   stormPolicyCreateAction :function(assetId){
-    	   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
-		   var view 			= require('views/storm/StormPolicyCreate');
-		   var VXResource 		= require('models/VXResource');
-		   var VXResourceList 	= require('collections/VXResourceList');
-		   var VXAsset 		  	= require('models/VXAsset');
-		   
-		   var assetModel = new VXAsset({id:assetId});
-		   var resource	  = new VXResource();
-		   resource.collection = new VXResourceList([],{
-			   queryParams : {
-				   'assetId' : assetId 
-			   }
-		   });
-		   assetModel.fetch({cache : true}).done(function(){
-			   App.rContent.show(new view({
-				   model : resource,
-			   		assetModel : assetModel
-			   }));
-		   });	   
-	   },
-	   stormPolicyEditAction :function(assetId,id){
-    	   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
-    	   var VXResource 		= require('models/VXResource');
-    	   var VXResourceList 	= require('collections/VXResourceList');
-    	   var VXAsset 		  	= require('models/VXAsset');
-		   var view 			= require('views/storm/StormPolicyCreate');
-		   var resource 		= new VXResource({id : id });
-		   resource.collection = new VXResourceList([],{
-			   queryParams : {
-				   'assetId' : assetId 
-			   }
-		   });
-		   var assetModel = new VXAsset({id:assetId});
-		   resource.fetch({
-//			   cache:true
-			   }).done(function(){
-			   assetModel.fetch({cache : true}).done(function(){
-				   App.rContent.show(new view({
-					   model : resource,
-					   assetModel : assetModel
-				   }));
-			   });
-		   });
-	   },
-	   //************** Asset Related ( Repository )*********************/
-	   assetCreateAction :function(assetType){
-    	   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
-		   var view		= require('views/asset/AssetCreate');
-		   var VXAsset	= require('models/VXAsset');
-		   App.rContent.show(new view({
-			   model : new VXAsset().set('assetType',assetType)
-		   }));
-	   },
-
-	   assetEditAction :function(id){
-    	   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
-		   var view		= require('views/asset/AssetCreate');
-		   var VXAsset	= require('models/VXAsset');
-
-		   var model = new VXAsset({id : id });
-		   model.fetch({cache:true}).done(function(){
-			   App.rContent.show(new view({
-				   model : model
-			   }));
-		   });
-	   },
- //************** Policy Related ( HBASE)*********************/
-	   hbaseManageAction :function(assetId){
-    	   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
-		   var view 			= require('views/hbase/HbaseTableLayout');
-		   var VXResourceList 	= require('collections/VXResourceList');
-		   var VXAsset 		  	= require('models/VXAsset');
-		   var resourceListForAsset = new VXResourceList([],{
-			   queryParams : {
-				   'assetId' : assetId 
-			   }
-		   });
-		   var assetModel = new VXAsset({id:assetId});
-		   assetModel.fetch({cache:true}).done(function(){
-			   App.rContent.show(new view({
-				   collection : resourceListForAsset,
-				   assetModel : assetModel
-			   }));
-			   resourceListForAsset.fetch({
-//				   cache : true
-			   });
-		   });   
-		   
-	   },
-	   hbasePolicyCreateAction :function(assetId){
-    	   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
-		   var view 			= require('views/hbase/HbasePolicyCreate');
-		   var VXResource 		= require('models/VXResource');
-		   var VXResourceList 	= require('collections/VXResourceList');
-		   var VXAsset 		  	= require('models/VXAsset');
-		   var resource	  		= new VXResource();
-		   resource.collection  = new VXResourceList([],{
-			   queryParams : {
-				   'assetId' : assetId 
-			   }
-		   });
-		   var assetModel = new VXAsset({id:assetId});
-		   assetModel.fetch({cache:true}).done(function(){
-			   App.rContent.show(new view({
-				   model : resource,
-			   		assetModel : assetModel
-			   }));
-		   }); 
-	   },
-	   hbasePolicyEditAction :function(assetId,id){
-    	   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
-    	   var VXResource 		= require('models/VXResource');
-    	   var VXResourceList 	= require('collections/VXResourceList');
-    	   var VXAsset 		  	= require('models/VXAsset');
-		   var view 			= require('views/hbase/HbasePolicyCreate');
-		   var resource 		= new VXResource({id : id });
-		   var assetModel 		= new VXAsset({id:assetId});
-
-		   resource.collection = new VXResourceList([],{
-			   queryParams : {
-				   'assetId' : assetId 
-			   }
-		   });
-		   resource.fetch({
-//			   cache:true
-			  }).done(function(){
-			   assetModel.fetch({cache:true}).done(function(){
-				   App.rContent.show(new view({
-					   model : resource,
-					   assetModel : assetModel
-				   }));
-			   });
-		   });
-	   },
-
 	   //************** Analytics(reports)  Related *********************/
 	   userAccessReportAction : function(){
 		   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.Analytics.value });
@@ -646,14 +271,11 @@ define(function(require) {
 		   
 		   var rangerServiceDefModel	= new RangerServiceDef({id:serviceTypeId});
 		   var rangerServiceModel 	= new RangerService();
-//		   rangerServiceDefModel.fetch({
-//			   cache:true
-//		   }).done(function(){
-			   App.rContent.show(new view({
-				   model 		: rangerServiceModel,
-				   serviceTypeId : serviceTypeId
-			   }));
-//		   });
+
+		   App.rContent.show(new view({
+			   model 		: rangerServiceModel,
+			   serviceTypeId : serviceTypeId
+		   }));
 	   },
 	   serviceEditAction :function(serviceTypeId, serviceId){
     	   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
@@ -676,6 +298,7 @@ define(function(require) {
 	   
 	   policyManageAction :function(serviceId){
 		   MAppState.set({ 'currentTab' : XAGlobals.AppTabs.PolicyManager.value });
+		   var XAUtil			= require('utils/XAUtils');
 		   var view 			= require('views/policies/RangerPolicyTableLayout');
 		   var RangerService	= require('models/RangerService');
 		   var RangerPolicyList	= require('collections/RangerPolicyList');
@@ -687,7 +310,7 @@ define(function(require) {
 				   'serviceId' : serviceId 
 			   }
 		   });*/
-		   rangerPolicyList.url = "service/plugins/policies/service/"+serviceId
+		   rangerPolicyList.url = XAUtil.getServicePoliciesURL(serviceId);
 		   
 		   rangerService.fetch({
 			  cache : false,

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/e551d589/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js b/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js
index 7b02ef9..b8c8bb2 100644
--- a/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js
+++ b/security-admin/src/main/webapp/scripts/models/BackboneFormDataType.js
@@ -33,7 +33,7 @@ define(function(require) {
 						case 'string':
 							if(!_.isUndefined(v.lookupSupported) && v.lookupSupported ){
 								formObj.type = 'Select2Remote';
-								formObj.pluginAttr = form.getPlugginAttr(false),
+								formObj.pluginAttr = _.isUndefined(v.url) ? form.getPlugginAttr(false) : form.getPlugginAttr(true, v.url), 
 								formObj.editorAttrs = {'data-placeholder': v.label },
 								formObj.options = function(callback, editor){
 				                    callback();

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/e551d589/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 3cafdae..cda8ea3 100644
--- a/security-admin/src/main/webapp/scripts/routers/Router.js
+++ b/security-admin/src/main/webapp/scripts/routers/Router.js
@@ -30,40 +30,6 @@ function(Backbone){
 			""							: "serviceManagerAction",//"dashboardAction",
 			"!/policymanager"			: "serviceManagerAction",
 
-			/* HDFS related */
-			"!/hdfs"					: "hdfsManageAction",
-			"!/hdfs/:id/policies"		: "hdfsManageAction",
-			"!/policy/:assetId/create"	: "policyCreateAction",
-			"!/policy/:id/edit"			: "policyEditAction",
-			"!/hdfs/:assetId/policy/:id": "policyViewAction",
-			
-			/****** Hive related **********************/
-			"!/hive"						: "hiveManageAction",
-			"!/hive/:id/policies"			: "hiveManageAction",
-			"!/hive/:assetId/policy/create"	: "hivePolicyCreateAction",
-			"!/hive/:assetId/policy/:id"	: "hivePolicyEditAction",
-			
-			/****** HBASE related **********************/
-			"!/hbase"						: "hbaseManageAction",
-			"!/hbase/:id/policies"			: "hbaseManageAction",
-			"!/hbase/:assetId/policy/create": "hbasePolicyCreateAction",
-			"!/hbase/:assetId/policy/:id"	: "hbasePolicyEditAction",
-			
-			/****** KNOX related ************************/
-			"!/knox/:id/policies"			: "knoxManageAction",
-			"!/knox/:assetId/policy/create"	: "knoxPolicyCreateAction",
-			"!/knox/:assetId/policy/:id"	: "knoxPolicyEditAction",
-			
-			/****** STORM related ************************/
-			"!/storm/:id/policies"			: "stormManageAction",
-			"!/storm/:assetId/policy/create": "stormPolicyCreateAction",
-			"!/storm/:assetId/policy/:id"	: "stormPolicyEditAction",
-			
-			/****** Asset related **********************/
-			"!/asset"					: "policyManagerAction",
-			"!/asset/create/:assetType" : "assetCreateAction",
-			"!/asset/:id"				: "assetEditAction",
-			
 			/****** Analytics Report related **********************/
 			"!/reports/userAccess"		: "userAccessReportAction",
 			
@@ -82,7 +48,6 @@ function(Backbone){
 			"!/group/:id"		: "groupEditAction",
 
 			/************GENERIC UI *****************************************/
-			/****** Service related **********************/
 			"!/service/:serviceType/create" 	: "serviceCreateAction",
 			"!/service/:serviceType/edit/:id"	: "serviceEditAction",
 			

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/e551d589/security-admin/src/main/webapp/scripts/utils/XAUtils.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/utils/XAUtils.js b/security-admin/src/main/webapp/scripts/utils/XAUtils.js
index 24850a7..4ff308f 100644
--- a/security-admin/src/main/webapp/scripts/utils/XAUtils.js
+++ b/security-admin/src/main/webapp/scripts/utils/XAUtils.js
@@ -707,5 +707,15 @@ define(function(require) {
 	    });
 	    $.fn.editabletypes.policyConditions = PolicyConditions;
 	};
+	XAUtils.capitaliseFirstLetter = function (string){
+	    return string.charAt(0).toUpperCase() + string.slice(1);
+	};
+	XAUtils.getServicePoliciesURL = function(serviceId) {
+		return "service/plugins/policies/service/"+serviceId;
+	};
+	XAUtils.getRangerServiceDef = function(name) {
+		return "service/plugins/definitions/name/"+name;
+	};
+	
     return XAUtils;
 });

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/e551d589/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
deleted file mode 100644
index 3fe0a6e..0000000
--- a/security-admin/src/main/webapp/scripts/views/policies/GroupPermList.js
+++ /dev/null
@@ -1,476 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
- /*
- *
- */
-define(function(require) {
-    'use strict';
-    
-	var Backbone		= require('backbone');
-    var App		        = require('App');
-	var XAEnums			= require('utils/XAEnums');
-	var XAUtil			= require('utils/XAUtils');
-	var localization	= require('utils/XALangSupport');
-	var VXGroup			= require('models/VXGroup');
-	require('bootstrap-editable');
-    	
-	var FormInputItem = Backbone.Marionette.ItemView.extend({
-		_msvName : 'FormInputItem',
-		template : require('hbs!tmpl/policies/GroupPermItem'),
-		tagName : 'tr',
-		templateHelpers : function(){
-			
-			return {
-				permissions 	: this.accessTypes,
-				policyConditions: this.policyConditions,
-				isModelNew		: !this.model.has('editMode'),
-				perms			: this.permsIds.length == 14 ? _.union(this.permsIds,[-1]) : this.permsIds,
-			};
-		},
-		ui : {
-			selectGroups	: '[data-js="selectGroups"]',
-			selectUsers		: '[data-js="selectUsers"]',
-			addPerms		: 'a[data-js="permissions"]',
-			conditionsTags	: '[class=tags1]',
-			delegatedAdmin	: 'input[data-js="delegatedAdmin"]'
-		},
-		events : {
-			'click [data-action="delete"]'	: 'evDelete',
-			'click td'						: 'evClickTD',
-			'change [data-js="selectGroups"]': 'evSelectGroup',
-			'change [data-js="selectUsers"]': 'evSelectUser',
-			'change input[class="policy-conditions"]'	: 'policyCondtionChange'
-		},
-
-		initialize : function(options) {
-			_.extend(this, _.pick(options, 'groupList','policyType','accessTypes','policyConditions','userList'));
-			this.setupPermissionsAndConditions();
-			
-		},
- 
-		onRender : function() {
-			this.setupFormForEditMode();
-			
-			this.createDropDown(this.ui.selectGroups, this.groupList, true);
-			this.createDropDown(this.ui.selectUsers, this.userList, false);
-			this.dropDownChange(this.ui.selectGroups);
-			this.dropDownChange(this.ui.selectUsers);
-
-			this.renderPerms();
-			this.renderPolicyCondtion();
-		},
-		setupFormForEditMode : function() {
-			this.accessItems = _.map(this.accessTypes, function(perm){ 
-				if(!_.isUndefined(perm)) 
-					return {'type':perm.label,isAllowed : false}
-			});
-			if(this.model.has('editMode') && this.model.get('editMode')){
-				if(!_.isUndefined(this.model.get('groupName')) && !_.isNull(this.model.get('groupName'))){
-					this.ui.selectGroups.val(this.model.get('groupName').split(','));
-				}
-				if(!_.isUndefined(this.model.get('userName')) && !_.isNull(this.model.get('userName'))){
-					this.ui.selectUsers.val(this.model.get('userName').split(','));
-				}
-				
-				if(!_.isUndefined(this.model.get('conditions'))){
-					_.each(this.model.get('conditions'), function(obj){
-						this.$el.find('input[data-js="'+obj.type+'"]').val(obj.value.toString())
-					},this);
-				}
-				_.each(this.model.get('accesses'), function(p){
-					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(!_.isUndefined(this.model.get('delegateAdmin')) && this.model.get('delegateAdmin')){
-					this.ui.delegatedAdmin.attr('checked', 'checked');
-				}
-			}
-		},
-		setupPermissionsAndConditions : function() {
-			var that = this;
-			this.permsIds = [], this.conditions = {};
-			//Set Permissions obj
-			if( this.model.has('editMode') && this.model.get('editMode')){
-				_.each(this.model.get('accesses'), function(p){
-					if(p.isAllowed){
-						var access = _.find(that.accessTypes,function(obj){if(obj.label == p.type) return obj});
-						this.permsIds.push(access.name);
-					}
-					
-				}, this);
-				//Set PolicyCondtion Obj to show in edit mode
-				_.each(this.model.get('conditions'), function(p){
-					this.conditions[p.type] = p.value;
-				}, this);
-			}
-		},
-		dropDownChange : function($select){
-			var that = this;
-			$select.on('change',function(e){
-		//		console.log(e.currentTarget.value);
-				var name = ($(e.currentTarget).attr('data-js') == that.ui.selectGroups.attr('data-js')) ? 'group': 'user';
-				that.checkDirtyFieldForDropDown(e);
-				
-				that.toggleAddButton(e);
-				if(e.removed != undefined){
-					var gNameArr = [];
-					if(that.model.get(name+'Name') != undefined)
-						gNameArr = _.without(that.model.get(name+'Name').split(','), e.removed.text);
-					if(!_.isEmpty(gNameArr)){
-						that.model.set(name+'Name',gNameArr.join(','));
-					}else{
-						that.model.unset(name+'Name');
-					}
-					return;
-				}
-				if(!_.isUndefined(e.added)){
-						var nameList = _.map($(e.currentTarget).select2("data"), function(obj){return obj.text});
-						that.model.set(name+'Name',nameList.toString());
-				}
-			});
-		},
-		createDropDown :function($select, list, typeGroup){
-			var that = this;
-			var placeholder = (typeGroup) ? 'Select Group' : 'Select User';
-			var url 		= (typeGroup) ? "service/xusers/groups" : "service/xusers/users";
-			if(this.model.has('editMode') && !_.isEmpty($select.val())){
-				var temp = $select.val().split(",");
-				_.each(temp , function(name){
-					if(_.isUndefined(list.where({ name : name}))){
-						var model;
-						model = typeGroup ? new VXGroup({name: name}) : new VXUser({name: name});  
-						model.fetch({async:false}).done(function(){
-							list.add(model);
-						});
-					}
-				});
-			}
-			var tags = list.map(function(m){
-				return { id : m.id+"" , text : m.get('name')};
-			});
-			$select.select2({
-				closeOnSelect : true,
-				placeholder : placeholder,
-			//	maximumSelectionSize : 1,
-				width :'220px',
-				tokenSeparators: [",", " "],
-				tags : tags, 
-				initSelection : function (element, callback) {
-					var data = [];
-					console.log(list);
-					
-					$(element.val().split(",")).each(function () {
-						var obj = _.findWhere(tags,{text:this});
-						data.push({id: obj.id, text: this})
-					});
-					callback(data);
-				},
-				createSearchChoice: function(term, data) {
-				/*	if ($(data).filter(function() {
-						return this.text.localeCompare(term) === 0;
-					}).length === 0) {
-						return {
-							id : term,
-							text: term
-						};
-					}*/
-				},
-				ajax: { 
-					url: url,
-					dataType: 'json',
-					data: function (term, page) {
-						return {name : term};
-					},
-					results: function (data, page) { 
-						var results = [] , selectedVals = [];
-						/*if(!_.isEmpty(that.ui.selectGroups.select2('val')))
-							selectedVals = that.ui.selectGroups.select2('val');*/
-						selectedVals = that.getGroupSelectdValues($select, typeGroup);
-						if(data.resultSize != "0"){
-							//if(data.vXGroups.length > 1){
-								if(typeGroup)
-									results = data.vXGroups.map(function(m, i){	return {id : m.id+"", text: m.name};	});
-								else
-									results = data.vXUsers.map(function(m, i){	return {id : m.id+"", text: m.name};	});
-								if(!_.isEmpty(selectedVals))
-									results = XAUtil.filterResultByText(results, selectedVals);
-						//		console.log(results.length);
-								return {results : results};
-							//}
-						//	results = [{id : data.vXGroups.id+"", text: data.vXGroups.name}];
-						//	return {results : results};
-						}
-						return {results : results};
-					}
-				},	
-				formatResult : function(result){
-					return result.text;
-				},
-				formatSelection : function(result){
-					return result.text;
-				},
-				formatNoMatches: function(result){
-					return 'No group found.';
-				}
-			}).on('select2-focus', XAUtil.select2Focus);
-		},
-		renderPerms :function(){
-			var that = this;
-//			var permArr = _.pick(XAEnums.XAPermType,  XAUtil.getStormActions(this.policyType));
-			this.perms =  _.map(this.accessTypes,function(m){return {text:m.label, value:m.name};});
-			this.perms.push({'value' : -1, 'text' : 'Select/Deselect All'});
-			this.ui.addPerms.editable({
-			    emptytext : 'Add Permissions',
-				source: this.perms,
-				value : this.permsIds,
-				display: function(values,srcData) {
-					if(_.isNull(values) || _.isEmpty(values)){
-						$(this).empty();
-						that.model.unset('accesses');
-						return;
-					}
-					if(_.contains(values,"-1")){
-						values = _.without(values,"-1")
-					}
-//			    	that.checkDirtyFieldForGroup(values);
-					var permTypeArr = [];
-					var valArr = _.map(values, function(id){
-						if(!_.isUndefined(id)){
-							var obj = _.findWhere(srcData,{'value' : id});
-							permTypeArr.push({permType : obj.value});
-							return "<span class='label label-inverse'>" + obj.text + "</span>";
-						}
-					});
-					var perms = []
-					if(that.model.has('accesses')){
-							perms = that.model.get('accesses');
-					}
-					_.each(that.accessTypes, function(obj) {
-						if(_.contains(values, obj.name)){
-							var type = obj.label
-							_.each(that.accessItems, function(item){ if(item.type == type) item.isAllowed = true });
-						}
-					});
-					// Save data to model
-					
-					if(!_.isEmpty(that.accessItems))
-						that.model.set('accesses', that.accessItems);
-					
-					$(this).html(valArr.join(" "));
-				},
-			}).on('click', function(e) {
-				e.stopPropagation();
-				e.preventDefault();
-				that.$('input[type="checkbox"][value="-1"]').click(function(e){
-					var checkboxlist =$(this).closest('.editable-checklist').find('input[type="checkbox"][value!=-1]')
-					$(this).is(':checked') ? checkboxlist.prop('checked',true) : checkboxlist.prop('checked',false); 
-					
-				});
-			});
-			
-		},
-		renderPolicyCondtion : function() {
-			var that = this;
-			if(this.policyConditions.length > 0){
-				var tmpl = _.map(this.policyConditions,function(obj){ 
-					return '<div class="editable-address margin-bottom-5"><label style="display:block !important;"><span>'+obj.label+' : </span></label><input type="text" name="'+obj.name+'" ></div>'
-				});
-				XAUtil.customXEditableForPolicyCond(tmpl.join(''));
-				this.$('#policyConditions').editable({
-					emptytext : 'Add Conditions',
-					value : this.conditions, 
-					display: function(value) {
-						var continue_ = false, i = 0;
-						if(!value) {
-							$(this).empty();
-							return; 
-						} // End if
-						_.each(value, function(val, name){ if(!_.isEmpty(val)) continue_ = true; });
-						if(continue_){
-							var html = _.map(value, function(val,name) {
-								var label = (i%2 == 0) ? 'label label-inverse' : 'label';
-								i++;
-								return _.isEmpty(val) ? '' : '<span class="'+label+'">'+name+' : '+ val + '</span>';	
-							});
-							var cond = _.map(value, function(val, name) {return {'type' : name, 'value' :val};});
-							that.model.set('conditions', cond);
-							$(this).html(html); 
-						}else{
-							that.model.unset('conditions');
-							$(this).empty();
-						}
-					} // End display option
-				}); // End editable()
-			}
-		},
-		getGroupSelectdValues : function($select, typeGroup){
-			var vals = [],selectedVals = [];
-			var name = typeGroup ? 'group' : 'user';
-			this.collection.each(function(m){
-				if(!_.isUndefined(m.get(name+'Name')) && !_.isNull(m.get(name+'Name'))){
-					vals.push.apply(vals, m.get(name+'Name').split(','));
-				}
-			});
-			if(!_.isEmpty($select.select2('val')))
-				selectedVals = $select.select2('val');
-			vals.push.apply(vals , selectedVals);
-			vals = $.unique(vals);
-			return vals;
-		},
-		evDelete : function(){
-			var that = this;
-			this.collection.remove(this.model);
-			this.toggleAddButton();
-		},
-		evClickTD : function(e){
-			var $el = $(e.currentTarget);
-			//Set Delegated Admin value 
-			if(!_.isUndefined($el.find('input').data('js'))){
-				this.model.set('delegateAdmin',$el.find('input').is(':checked'))
-				return;
-			}
-		},
-		checkDirtyFieldForCheckBox : function(perms){
-			var permList = [];
-			if(!_.isUndefined(this.model.get('_vPermList')))
-				permList = _.map(this.model.attributes._vPermList,function(obj){return obj.permType;});
-			perms = _.map(perms,function(obj){return obj.permType;});
-			XAUtil.checkDirtyField(permList, perms, this.$el);
-		},
-		toggleAddButton : function(e){
-			var temp = [];
-			this.collection.each(function(m){
-				if(!_.isUndefined(m.get('groupId'))){
-					temp.push.apply(temp, m.get('groupId').split(','));
-					
-				}
-			});
-			if(!_.isUndefined(e)){
-				if( !_.isUndefined(e.added) && ((temp.length + 1) == this.groupList.length)) 
-					$('[data-action="addGroup"]').hide();
-				if(!_.isUndefined(e.removed))
-					$('[data-action="addGroup"]').show();
-			}else{
-				$('[data-action="addGroup"]').show();
-			}
-		},
-		policyCondtionChange :function(e){
-			if(!_.isEmpty($(e.currentTarget).val()) && !_.isEmpty(this.policyConditions)){
-				var policyCond = { 'type' : $(e.currentTarget).attr('data-js'), 'value' : $(e.currentTarget).val() } ;
-				var conditions = [];
-				if(this.model.has('conditions')){
-					conditions = this.model.get('conditions')
-				}
-				conditions.push(policyCond);
-				this.model.set('conditions',conditions);
-			}
-				
-		},
-		checkDirtyFieldForDropDown : function(e){
-			//that.model.has('groupId')
-			var groupIdList =[];
-			if(!_.isUndefined(this.model.get('groupId')))
-				groupIdList = this.model.get('groupId').split(',');
-			XAUtil.checkDirtyField(groupIdList, e.val, $(e.currentTarget));
-		},
-	});
-
-
-
-	return Backbone.Marionette.CompositeView.extend({
-		_msvName : 'FormInputItemList',
-		template : require('hbs!tmpl/policies/GroupPermList'),
-		//tagName : 'ul', 
-		//className : 'timeline-container',
-		templateHelpers :function(){
-			return {
-				permHeaders : this.getPermHeaders()
-			};
-		},
-		getItemView : function(item){
-			if(!item){
-				return;
-			}
-			return FormInputItem;
-		},
-		itemViewContainer : ".js-formInput",
-		itemViewOptions : function() {
-			return {
-				'collection' 	: this.collection,
-				'groupList' 	: this.groupList,
-				'userList' 	: this.userList,
-				'policyType'	: this.policyType,
-				'accessTypes'	: this.accessTypes,
-				'policyConditions' : this.rangerServiceDefModel.get('policyConditions')
-			};
-		},
-		events : {
-			'click [data-action="addGroup"]' : 'addNew'
-		},
-		initialize : function(options) {
-			_.extend(this, _.pick(options, 'groupList','policyType','accessTypes','rangerServiceDefModel','userList'));
-			//this.hiveGroupPerm = _.has(options,'hiveGroupPerm') ? true : false;
-			this.listenTo(this.groupList, 'sync', this.render, this);
-			if(this.collection.length == 0)
-				this.collection.add(new Backbone.Model());
-		},
-		onRender : function(){
-			//console.log("onRender of ArtifactFormNoteList called");
-			this.toggleAddButton();
-		},
-		addNew : function(){
-			var that =this;
-			if(this.groupList.length > this.collection.length){
-				this.collection.add(new Backbone.Model());
-				this.toggleAddButton();
-			}
-		},
-		toggleAddButton : function(){
-			var groupIds=[];
-			this.collection.each(function(m){
-				if(!_.isUndefined(m.get('groupId'))){
-					var temp = m.get('groupId').split(',');
-					groupIds.push.apply(groupIds,temp);
-				}
-			});
-			if(groupIds.length == this.groupList.length)
-				this.$('button[data-action="addGroup"]').hide();
-			else
-				this.$('button[data-action="addGroup"]').show();
-		},
-		getPermHeaders : function(){
-			var permList = [];//_.map(this.accessTypes,function(type){ return type.label});
-			
-			permList.unshift(localization.tt('lbl.delegatedAdmin'));
-			permList.unshift(localization.tt('lbl.permissions'));
-			if(!_.isEmpty(this.rangerServiceDefModel.get('policyConditions'))){
-				permList.unshift(localization.tt('h.policyCondition'));
-			}
-			permList.unshift(localization.tt('lbl.selectUser'));
-			permList.unshift(localization.tt('lbl.selectGroup'));
-			permList.push("");
-			return permList;
-		},
-	});
-
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/e551d589/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js b/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
new file mode 100644
index 0000000..a44305d
--- /dev/null
+++ b/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
@@ -0,0 +1,473 @@
+/*
+ * 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 App		        = require('App');
+	var XAEnums			= require('utils/XAEnums');
+	var XAUtil			= require('utils/XAUtils');
+	var localization	= require('utils/XALangSupport');
+	var VXGroup			= require('models/VXGroup');
+	var VXGroupList			= require('collections/VXGroupList');
+	var VXUserList			= require('collections/VXUserList');
+	require('bootstrap-editable');
+    	
+	var FormInputItem = Backbone.Marionette.ItemView.extend({
+		_msvName : 'FormInputItem',
+		template : require('hbs!tmpl/policies/PermissionItem'),
+		tagName : 'tr',
+		templateHelpers : function(){
+			
+			return {
+				permissions 	: this.accessTypes,
+				policyConditions: this.policyConditions,
+				isModelNew		: !this.model.has('editMode'),
+				perms			: this.permsIds.length == 14 ? _.union(this.permsIds,[-1]) : this.permsIds,
+			};
+		},
+		ui : {
+			selectGroups	: '[data-js="selectGroups"]',
+			selectUsers		: '[data-js="selectUsers"]',
+			addPerms		: 'a[data-js="permissions"]',
+			conditionsTags	: '[class=tags1]',
+			delegatedAdmin	: 'input[data-js="delegatedAdmin"]'
+		},
+		events : {
+			'click [data-action="delete"]'	: 'evDelete',
+			'click td'						: 'evClickTD',
+			'change [data-js="selectGroups"]': 'evSelectGroup',
+			'change [data-js="selectUsers"]': 'evSelectUser',
+			'change input[class="policy-conditions"]'	: 'policyCondtionChange'
+		},
+
+		initialize : function(options) {
+			_.extend(this, _.pick(options, 'groupList','policyType','accessTypes','policyConditions','userList'));
+			this.setupPermissionsAndConditions();
+			
+		},
+ 
+		onRender : function() {
+			//To setup permissions for edit mode 
+			this.setupFormForEditMode();
+			//create select2 dropdown for groups and users  
+			this.createDropDown(this.ui.selectGroups, this.groupList, true);
+			this.createDropDown(this.ui.selectUsers, this.userList, false);
+			//groups or users select2 dropdown change vent 
+			this.dropDownChange(this.ui.selectGroups);
+			this.dropDownChange(this.ui.selectUsers);
+			//render permissions and policy conditions
+			this.renderPerms();
+			this.renderPolicyCondtion();
+		},
+		setupFormForEditMode : function() {
+			this.accessItems = _.map(this.accessTypes, function(perm){ 
+				if(!_.isUndefined(perm)) 
+					return {'type':perm.label,isAllowed : false}
+			});
+			if(this.model.has('editMode') && this.model.get('editMode')){
+				if(!_.isUndefined(this.model.get('groupName')) && !_.isNull(this.model.get('groupName'))){
+					this.ui.selectGroups.val(this.model.get('groupName').split(','));
+				}
+				if(!_.isUndefined(this.model.get('userName')) && !_.isNull(this.model.get('userName'))){
+					this.ui.selectUsers.val(this.model.get('userName').split(','));
+				}
+				
+				if(!_.isUndefined(this.model.get('conditions'))){
+					_.each(this.model.get('conditions'), function(obj){
+						this.$el.find('input[data-js="'+obj.type+'"]').val(obj.value.toString())
+					},this);
+				}
+				_.each(this.model.get('accesses'), function(p){
+					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(!_.isUndefined(this.model.get('delegateAdmin')) && this.model.get('delegateAdmin')){
+					this.ui.delegatedAdmin.attr('checked', 'checked');
+				}
+			}
+		},
+		setupPermissionsAndConditions : function() {
+			var that = this;
+			this.permsIds = [], this.conditions = {};
+			//Set Permissions obj
+			if( this.model.has('editMode') && this.model.get('editMode')){
+				_.each(this.model.get('accesses'), function(p){
+					if(p.isAllowed){
+						var access = _.find(that.accessTypes,function(obj){if(obj.label == p.type) return obj});
+						this.permsIds.push(access.name);
+					}
+					
+				}, this);
+				//Set PolicyCondtion Obj to show in edit mode
+				_.each(this.model.get('conditions'), function(p){
+					this.conditions[p.type] = p.value;
+				}, this);
+			}
+		},
+		dropDownChange : function($select){
+			var that = this;
+			$select.on('change',function(e){
+		//		console.log(e.currentTarget.value);
+				var name = ($(e.currentTarget).attr('data-js') == that.ui.selectGroups.attr('data-js')) ? 'group': 'user';
+				that.checkDirtyFieldForDropDown(e);
+				
+				that.toggleAddButton(e);
+				if(e.removed != undefined){
+					var gNameArr = [];
+					if(that.model.get(name+'Name') != undefined)
+						gNameArr = _.without(that.model.get(name+'Name').split(','), e.removed.text);
+					if(!_.isEmpty(gNameArr)){
+						that.model.set(name+'Name',gNameArr.join(','));
+					}else{
+						that.model.unset(name+'Name');
+					}
+					return;
+				}
+				if(!_.isUndefined(e.added)){
+						var nameList = _.map($(e.currentTarget).select2("data"), function(obj){return obj.text});
+						that.model.set(name+'Name',nameList.toString());
+				}
+			});
+		},
+		createDropDown :function($select, list, typeGroup){
+			var that = this;
+			var placeholder = (typeGroup) ? 'Select Group' : 'Select User';
+			var url 		= (typeGroup) ? "service/xusers/groups" : "service/xusers/users";
+			if(this.model.has('editMode') && !_.isEmpty($select.val())){
+				var temp = $select.val().split(",");
+				_.each(temp , function(name){
+					if(_.isEmpty(list.where({ 'name' : name}))){
+						var coll;
+						coll = typeGroup ? new VXGroupList() : new VXUserList();
+						coll.queryParams['name'] = name;
+						coll.fetch({async:false}).done(function(){
+							list.add(coll.models);
+						});
+					}
+				});
+			}
+			var tags = list.map(function(m){
+				return { id : m.id+"" , text : m.get('name')};
+			});
+			$select.select2({
+				closeOnSelect : true,
+				placeholder : placeholder,
+			//	maximumSelectionSize : 1,
+				width :'220px',
+				tokenSeparators: [",", " "],
+				tags : tags, 
+				initSelection : function (element, callback) {
+					var data = [];
+					console.log(list);
+					
+					$(element.val().split(",")).each(function () {
+						var obj = _.findWhere(tags,{text:this});
+						data.push({id: obj.id, text: this})
+					});
+					callback(data);
+				},
+				ajax: { 
+					url: url,
+					dataType: 'json',
+					data: function (term, page) {
+						return {name : term};
+					},
+					results: function (data, page) { 
+						var results = [] , selectedVals = [];
+						//Get selected values of groups/users dropdown
+						selectedVals = that.getSelectdValues($select, typeGroup);
+						if(data.resultSize != "0"){
+							if(typeGroup)
+								results = data.vXGroups.map(function(m, i){	return {id : m.id+"", text: m.name};	});
+							else
+								results = data.vXUsers.map(function(m, i){	return {id : m.id+"", text: m.name};	});
+							if(!_.isEmpty(selectedVals))
+								results = XAUtil.filterResultByText(results, selectedVals);
+							return {results : results};
+						}
+						return {results : results};
+					}
+				},	
+				formatResult : function(result){
+					return result.text;
+				},
+				formatSelection : function(result){
+					return result.text;
+				},
+				formatNoMatches: function(result){
+					return 'No group found.';
+				}
+			}).on('select2-focus', XAUtil.select2Focus);
+		},
+		renderPerms :function(){
+			var that = this;
+			this.perms =  _.map(this.accessTypes,function(m){return {text:m.label, value:m.name};});
+			this.perms.push({'value' : -1, 'text' : 'Select/Deselect All'});
+			//create x-editable for permissions
+			this.ui.addPerms.editable({
+			    emptytext : 'Add Permissions',
+				source: this.perms,
+				value : this.permsIds,
+				display: function(values,srcData) {
+					if(_.isNull(values) || _.isEmpty(values)){
+						$(this).empty();
+						that.model.unset('accesses');
+						return;
+					}
+					if(_.contains(values,"-1")){
+						values = _.without(values,"-1")
+					}
+//			    	that.checkDirtyFieldForGroup(values);
+					var permTypeArr = [];
+					var valArr = _.map(values, function(id){
+						if(!_.isUndefined(id)){
+							var obj = _.findWhere(srcData,{'value' : id});
+							permTypeArr.push({permType : obj.value});
+							return "<span class='label label-inverse'>" + obj.text + "</span>";
+						}
+					});
+					var perms = []
+					if(that.model.has('accesses')){
+							perms = that.model.get('accesses');
+					}
+					//reset isAllowed flag in accesssItems to set newly isAllowed
+					_.each(that.accessItems, function(item){ item.isAllowed = false });
+					
+					_.each(that.accessTypes, function(obj) {
+						if(_.contains(values, obj.name)){
+							var type = obj.label
+							_.each(that.accessItems, function(item){ if(item.type == type) item.isAllowed = true });
+						}
+					});
+					// Save form data to model
+					
+					if(!_.isEmpty(that.accessItems))
+						that.model.set('accesses', that.accessItems);
+					
+					$(this).html(valArr.join(" "));
+				},
+			}).on('click', function(e) {
+				e.stopPropagation();
+				e.preventDefault();
+				var selectAll = true;
+				var checklist = that.$('.editable-checklist').find('input[type="checkbox"]')
+				_.each(checklist,function(checkbox){ if($(checkbox).val() != -1 && !$(checkbox).is(':checked')) selectAll = false;})
+				if(selectAll){
+					that.$('.editable-checklist').find('input[type="checkbox"][value="-1"]').prop('checked',true)
+				}
+				//for selectAll functionality
+				that.$('input[type="checkbox"][value="-1"]').click(function(e){
+					var checkboxlist =$(this).closest('.editable-checklist').find('input[type="checkbox"][value!=-1]')
+					$(this).is(':checked') ? checkboxlist.prop('checked',true) : checkboxlist.prop('checked',false); 
+					
+				});
+				
+			});
+			
+		},
+		renderPolicyCondtion : function() {
+			var that = this;
+			
+			if(this.policyConditions.length > 0){
+				var tmpl = _.map(this.policyConditions,function(obj){ 
+					return '<div class="editable-address margin-bottom-5"><label style="display:block !important;"><span>'+obj.label+' : </span></label><input type="text" name="'+obj.name+'" ></div>'
+				});
+				//Create new bootstrap x-editable `policyConditions` dataType for policy conditions 
+				XAUtil.customXEditableForPolicyCond(tmpl.join(''));
+				//create x-editable for policy conditions
+				this.$('#policyConditions').editable({
+					emptytext : 'Add Conditions',
+					value : this.conditions, 
+					display: function(value) {
+						var continue_ = false, i = 0;
+						if(!value) {
+							$(this).empty();
+							return; 
+						}
+						_.each(value, function(val, name){ if(!_.isEmpty(val)) continue_ = true; });
+						if(continue_){
+							var html = _.map(value, function(val,name) {
+								var label = (i%2 == 0) ? 'label label-inverse' : 'label';
+								i++;
+								return _.isEmpty(val) ? '' : '<span class="'+label+'">'+name+' : '+ val + '</span>';	
+							});
+							var cond = _.map(value, function(val, name) {return {'type' : name, 'value' :val};});
+							that.model.set('conditions', cond);
+							$(this).html(html); 
+						}else{
+							that.model.unset('conditions');
+							$(this).empty();
+						}
+					}
+				});
+			}
+		},
+		getSelectdValues : function($select, typeGroup){
+			var vals = [],selectedVals = [];
+			var name = typeGroup ? 'group' : 'user';
+			this.collection.each(function(m){
+				if(!_.isUndefined(m.get(name+'Name')) && !_.isNull(m.get(name+'Name'))){
+					vals.push.apply(vals, m.get(name+'Name').split(','));
+				}
+			});
+			if(!_.isEmpty($select.select2('val')))
+				selectedVals = $select.select2('val');
+			vals.push.apply(vals , selectedVals);
+			vals = $.unique(vals);
+			return vals;
+		},
+		evDelete : function(){
+			var that = this;
+			this.collection.remove(this.model);
+			this.toggleAddButton();
+		},
+		evClickTD : function(e){
+			var $el = $(e.currentTarget);
+			//Set Delegated Admin value 
+			if(!_.isUndefined($el.find('input').data('js'))){
+				this.model.set('delegateAdmin',$el.find('input').is(':checked'))
+				return;
+			}
+		},
+		checkDirtyFieldForCheckBox : function(perms){
+			var permList = [];
+			if(!_.isUndefined(this.model.get('_vPermList')))
+				permList = _.map(this.model.attributes._vPermList,function(obj){return obj.permType;});
+			perms = _.map(perms,function(obj){return obj.permType;});
+			XAUtil.checkDirtyField(permList, perms, this.$el);
+		},
+		toggleAddButton : function(e){
+			var temp = [];
+			this.collection.each(function(m){
+				if(!_.isUndefined(m.get('groupId'))){
+					temp.push.apply(temp, m.get('groupId').split(','));
+				}
+			});
+			if(!_.isUndefined(e)){
+				if( !_.isUndefined(e.added) && ((temp.length + 1) == this.groupList.length)) 
+					$('[data-action="addGroup"]').hide();
+				if(!_.isUndefined(e.removed))
+					$('[data-action="addGroup"]').show();
+			}else{
+				$('[data-action="addGroup"]').show();
+			}
+		},
+		policyCondtionChange :function(e){
+			if(!_.isEmpty($(e.currentTarget).val()) && !_.isEmpty(this.policyConditions)){
+				var policyCond = { 'type' : $(e.currentTarget).attr('data-js'), 'value' : $(e.currentTarget).val() } ;
+				var conditions = [];
+				if(this.model.has('conditions')){
+					conditions = this.model.get('conditions')
+				}
+				conditions.push(policyCond);
+				this.model.set('conditions',conditions);
+			}
+				
+		},
+		checkDirtyFieldForDropDown : function(e){
+			//that.model.has('groupId')
+			var groupIdList =[];
+			if(!_.isUndefined(this.model.get('groupId')))
+				groupIdList = this.model.get('groupId').split(',');
+			XAUtil.checkDirtyField(groupIdList, e.val, $(e.currentTarget));
+		},
+	});
+
+
+
+	return Backbone.Marionette.CompositeView.extend({
+		_msvName : 'FormInputItemList',
+		template : require('hbs!tmpl/policies/PermissionList'),
+		templateHelpers :function(){
+			return {
+				permHeaders : this.getPermHeaders()
+			};
+		},
+		getItemView : function(item){
+			if(!item){
+				return;
+			}
+			return FormInputItem;
+		},
+		itemViewContainer : ".js-formInput",
+		itemViewOptions : function() {
+			return {
+				'collection' 	: this.collection,
+				'groupList' 	: this.groupList,
+				'userList' 	: this.userList,
+				'policyType'	: this.policyType,
+				'accessTypes'	: this.accessTypes,
+				'policyConditions' : this.rangerServiceDefModel.get('policyConditions')
+			};
+		},
+		events : {
+			'click [data-action="addGroup"]' : 'addNew'
+		},
+		initialize : function(options) {
+			_.extend(this, _.pick(options, 'groupList','policyType','accessTypes','rangerServiceDefModel','userList'));
+			this.listenTo(this.groupList, 'sync', this.render, this);
+			if(this.collection.length == 0)
+				this.collection.add(new Backbone.Model());
+		},
+		onRender : function(){
+			this.toggleAddButton();
+		},
+		addNew : function(){
+			var that =this;
+			if(this.groupList.length > this.collection.length){
+				this.collection.add(new Backbone.Model());
+				this.toggleAddButton();
+			}
+		},
+		toggleAddButton : function(){
+			var groupIds=[];
+			this.collection.each(function(m){
+				if(!_.isUndefined(m.get('groupId'))){
+					var temp = m.get('groupId').split(',');
+					groupIds.push.apply(groupIds,temp);
+				}
+			});
+			if(groupIds.length == this.groupList.length)
+				this.$('button[data-action="addGroup"]').hide();
+			else
+				this.$('button[data-action="addGroup"]').show();
+		},
+		getPermHeaders : function(){
+			var permList = [];
+			permList.unshift(localization.tt('lbl.delegatedAdmin'));
+			permList.unshift(localization.tt('lbl.permissions'));
+			if(!_.isEmpty(this.rangerServiceDefModel.get('policyConditions'))){
+				permList.unshift(localization.tt('h.policyCondition'));
+			}
+			permList.unshift(localization.tt('lbl.selectUser'));
+			permList.unshift(localization.tt('lbl.selectGroup'));
+			permList.push("");
+			return permList;
+		},
+	});
+
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/e551d589/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 fa11698..1407614 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyCreate.js
@@ -32,16 +32,16 @@ define(function(require){
 	var XALinks 		= require('modules/XALinks');
 	var localization	= require('utils/XALangSupport');
 	
-	var PolicycreateTmpl = require('hbs!tmpl/hdfs/PolicyCreate_tmpl');
+	var RangerPolicycreateTmpl = require('hbs!tmpl/policies/RangerPolicyCreate_tmpl');
 	var RangerPolicyForm = require('views/policies/RangerPolicyForm');
 	var RangerServiceDef	= require('models/RangerServiceDef');
 
-	var PolicyCreate = Backbone.Marionette.Layout.extend(
-	/** @lends PolicyCreate */
+	var RangerPolicyCreate = Backbone.Marionette.Layout.extend(
+	/** @lends RangerPolicyCreate */
 	{
-		_viewName : 'PolicyCreate',
+		_viewName : 'RangerPolicyCreate',
 		
-    	template: PolicycreateTmpl,
+    	template : RangerPolicycreateTmpl,
     	templateHelpers : function(){
     		return {
     			editPolicy : this.editPolicy
@@ -53,7 +53,6 @@ define(function(require){
     			return [XALinks.get('RepositoryManager'),XALinks.get('ManagePolicies',{model : this.rangerService}),XALinks.get('PolicyCreate')];
     		else
     			return [XALinks.get('RepositoryManager'),XALinks.get('ManagePolicies',{model : this.rangerService}),XALinks.get('PolicyEdit')];
-//    		return [];
     	} ,        
 
 		/** Layout sub regions */
@@ -80,12 +79,12 @@ define(function(require){
 		},
 
     	/**
-		* intialize a new PolicyCreate Layout 
+		* intialize a new RangerPolicyCreate Layout 
 		* @constructs
 		*/
 		initialize: function(options) {
 			var that = this;
-			console.log("initialized a PolicyCreate Layout");
+			console.log("initialized a RangerPolicyCreate Layout");
 
 			_.extend(this, _.pick(options, 'rangerService'));
 			this.initializeServiceDef();
@@ -103,7 +102,7 @@ define(function(require){
 		initializeServiceDef : function(){
 			
 			this.rangerServiceDefModel	= new RangerServiceDef();
-			this.rangerServiceDefModel.url = "service/plugins/definitions/name/"+this.rangerService.get('type');
+			this.rangerServiceDefModel.url = XAUtil.getRangerServiceDef(this.rangerService.get('type'));
 			this.rangerServiceDefModel.fetch({
 				cache : false,
 				async : false
@@ -118,26 +117,8 @@ define(function(require){
 
 		/** on render callback */
 		onRender: function() {
-//			XAUtil.showAlerForDisabledPolicy(this);
 			this.rForm.show(this.form);
-//			this.rForm.$el.dirtyFields();
-//			XAUtil.preventNavigation(localization.tt('dialogMsg.preventNavPolicyForm'),this.rForm.$el);
-//			this.initializePlugins();
 		},
-
-		/** all post render plugin initialization */
-	/*	initializePlugins: function(){
-		},
-		popupCallBack : function(msg,validateObj){
-			var that = this;
-			XAUtil.alertPopup({
-				msg :msg,
-				callback : function(){
-				//	if(validateObj.auditLoggin)
-				//		that.savePolicy();
-				}
-			});
-		},*/
 		onSave: function(){
 			var that = this, valid = false;
 			var errors = this.form.commit({validate : false});
@@ -145,52 +126,6 @@ define(function(require){
 				return;
 			}
 			this.savePolicy();
-			/*var validateObj = this.form.formValidation();
-			valid = (validateObj.groupSet && validateObj.permSet) || (validateObj.userSet && validateObj.userPerm);
-			if(!valid){
-				if(validateObj.groupSet && (!validateObj.permSet)){
-					this.popupCallBack(localization.tt('msg.addGroupPermission'),validateObj);
-				}else if((!validateObj.groupSet) && (validateObj.permSet)) {
-					this.popupCallBack(localization.tt('msg.addGroup'),validateObj);
-						
-				}else if(validateObj.userSet && (!validateObj.userPerm)){
-					this.popupCallBack(localization.tt('msg.addUserPermission'),validateObj);
-				}else if((!validateObj.userSet) && (validateObj.userPerm)) {
-					this.popupCallBack(localization.tt('msg.addUser'),validateObj);
-						
-				}else if((!validateObj.auditLoggin) && (!validateObj.groupPermSet)){
-					XAUtil.alertPopup({
-						msg :localization.tt('msg.yourAuditLogginIsOff'),
-						callback : function(){
-							if(!that.model.isNew()){
-								that.model.destroy({success: function(model, response) {
-									XAUtil.notifySuccess('Success', localization.tt('msg.policyDeleteMsg'));
-									App.appRouter.navigate("#!/hdfs/"+that.assetModel.id+"/policies",{trigger: true});
-								}});
-							}else{
-								XAUtil.notifyError('Error', localization.tt('msg.policyNotAddedMsg'));
-								App.appRouter.navigate("#!/hdfs/"+that.assetModel.id+"/policies",{trigger: true});
-							}
-						}
-					});
-				}else{
-					this.savePolicy();
-				}
-			}else{
-				if(validateObj.groupSet && (!validateObj.permSet)){
-					this.popupCallBack(localization.tt('msg.addGroupPermission'),validateObj);
-				}else if((!validateObj.groupSet) && (validateObj.permSet)) {
-					this.popupCallBack(localization.tt('msg.addGroup'),validateObj);
-						
-				}else if(validateObj.userSet && (!validateObj.userPerm)){
-					this.popupCallBack(localization.tt('msg.addUserPermission'),validateObj);
-				}else if((!validateObj.userSet) && (validateObj.userPerm)) {
-					this.popupCallBack(localization.tt('msg.addUser'),validateObj);
-						
-				}else
-					this.savePolicy();
-			}*/
-			
 		},
 		savePolicy : function(){
 			var that = this;
@@ -200,7 +135,6 @@ define(function(require){
 		saveMethod : function(){
 			var that = this;
 			XAUtil.blockUI();
-			this.model.url = "service/plugins/policies";
 			this.model.save({},{
 				wait: true,
 				success: function () {
@@ -212,99 +146,16 @@ define(function(require){
 						App.appRouter.navigate("#!/service/"+that.rangerService.id+"/policies",{trigger: true});
 						return;
 					}
-					
 					App.appRouter.navigate("#!/service/"+that.rangerService.id+"/policies",{trigger: true});
-					
-					/*var view = require('views/hdfs/HDFSTableLayout');
-					var resourceListForAsset = new VXResourceList([],{
-						   queryParams : {
-							   'assetId' : that.assetModel.id 
-						   }
-					   });
-					resourceListForAsset.fetch({
-						cache : true,
-						'data' : {
-				//			'resourceType':XAEnums.AssetType.ASSET_HDFS.value,
-							'assetId' :that.assetModel.id
-						}
-					}).done(function(){
-						var newColl = resourceListForAsset;
-						resourceListForAsset.getLastPage({
-							cache : false,
-							data  : {
-			//					'resourceType' : XAEnums.AssetType.ASSET_HDFS.value,
-								'assetId' : that.assetModel.id
-							}
-						}).done(function(){
-							var model = newColl.get(that.model.id);
-							if(model){
-								model.trigger("model:highlightBackgridRow");
-							}
-						});
-						
-						App.rContent.show(new view({
-							collection : resourceListForAsset,
-							assetModel : that.assetModel
-						}));
-					});*/
-					
 					console.log("success");
 				},
 				error: function (model, response, options) {
 					    XAUtil.blockUI('unblock');
-					    if ( response && response.responseJSON && response.responseJSON.msgDesc){
-						if( response.responseJSON.messageList && response.responseJSON.messageList.length > 0 && !_.isUndefined(response.responseJSON.messageList[0].fieldName)){
-						    if(response.responseJSON.messageList[0].fieldName == "parentPermission"){
-							XAUtil.confirmPopup({
-							    msg :response.responseJSON.msgDesc,
-							    callback : function(){
-								that.model.set('checkParentPermission',XAEnums.BooleanValue.BOOL_FALSE.value);
-								that.saveMethod();
-							    }
-							});
-						    }else{
-							that.form.fields.name.setError(response.responseJSON.msgDesc);
-							XAUtil.scrollToField(that.form.fields.name.$el);
-							//XAUtil.notifyError('Error', response.responseJSON.msgDesc);
-						    }
-						}else{
-						    //that.form.fields.name.setError(response.responseJSON.msgDesc);
-						    //XAUtil.scrollToField(that.form.fields.name.$el);
-						    XAUtil.notifyError('Error', response.responseJSON.msgDesc);
-						}
-					    }else
 						XAUtil.notifyError('Error', 'Error creating Policy!');
 					    console.log("error");
 				}
 			});
 		},
-		/*onDelete :function(){
-			var that = this;
-			XAUtil.confirmPopup({
-				//msg :localize.tt('msg.confirmDelete'),
-				msg :'Are you sure want to delete ?',
-				callback : function(){
-					XAUtil.blockUI();
-					that.model.destroy({
-							success: function(model, response) {
-								XAUtil.blockUI('unblock');
-								XAUtil.allowNavigation();
-								XAUtil.notifySuccess('Success', localization.tt('msg.policyDeleteMsg'));
-								App.appRouter.navigate("#!/hdfs/"+that.assetModel.id+"/policies",{trigger: true});
-							},
-							error: function (model, response, options) {
-								XAUtil.blockUI('unblock');
-								if ( response && response.responseJSON && response.responseJSON.msgDesc){
-									    XAUtil.notifyError('Error', response.responseJSON.msgDesc);
-								    }else
-								    	XAUtil.notifyError('Error', 'Error deleting Policy!');
-								    console.log("error");
-							}
-					});
-					
-				}
-			});
-		},*/
 		onCancel : function(){
 			XAUtil.allowNavigation();
 			App.appRouter.navigate("#!/service/"+this.rangerService.id+"/policies",{trigger: true});
@@ -317,5 +168,5 @@ define(function(require){
 
 	});
 
-	return PolicyCreate;
+	return RangerPolicyCreate;
 });

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/e551d589/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 7d35d01..532ed67 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
@@ -33,8 +33,7 @@ define(function(require){
 	var VXGroupList		= require('collections/VXGroupList');
 	var VXAuditMapList	= require('collections/VXAuditMapList');
 	var VXUserList		= require('collections/VXUserList');
-	var GroupPermList 	= require('views/policies/GroupPermList');
-	var UserPermList 	= require('views/policies/UserPermList');
+	var PermissionList 	= require('views/policies/PermissionList');
 	var RangerPolicyResource		= require('models/RangerPolicyResource');
 	var BackboneFormDataType	= require('models/BackboneFormDataType');
 
@@ -45,17 +44,17 @@ define(function(require){
 	require('jquery-ui');
 	require('tag-it');
 
-	var PolicyForm = Backbone.Form.extend(
-	/** @lends PolicyForm */
+	var RangerPolicyForm = Backbone.Form.extend(
+	/** @lends RangerPolicyForm */
 	{
-		_viewName : 'PolicyForm',
+		_viewName : 'RangerPolicyForm',
 
     	/**
-		* intialize a new PolicyForm Form View 
+		* intialize a new RangerPolicyForm Form View 
 		* @constructs
 		*/
 		initialize: function(options) {
-			console.log("initialized a PolicyForm Form View");
+			console.log("initialized a RangerPolicyForm Form View");
 			_.extend(this, _.pick(options, 'rangerServiceDefModel', 'rangerService'));
 			this.setupForm()
     		Backbone.Form.prototype.initialize.call(this, options);
@@ -63,19 +62,8 @@ define(function(require){
 			this.initializeCollection();
 			this.bindEvents();
 		},
-		type : {
-			DATABASE : 1,
-			TABLE    : 2,
-			COLUMN   : 3,
-			VIEW   : 4,
-			UDF   : 5
-		},
 		initializeCollection: function(){
-			this.permMapList = this.model.isNew() ? new VXPermMapList() : this.model.get('permMapList');
-			this.auditList = this.model.isNew() ? new VXAuditMapList() : this.model.get('auditList');
-			
 			this.formInputList 		= XAUtil.makeCollForGroupPermission(this.model);
-
 		},
 		/** all events binding here */
 		bindEvents : function(){
@@ -94,13 +82,17 @@ define(function(require){
 		*/
 		fields: ['name', 'description', 'isEnabled', 'isAuditEnabled'],
 		schema :function(){
+			return this.getSchema();
+		},
+		getSchema : function(){
 			var attrs = {};
-			var that = this;
+			var schemaNames = this.rangerServiceDefModel.get('name') == "hdfs" ? ['description', 'isRecursive', 'isAuditEnabled'] : ['description', 'isAuditEnabled'];
+			
 			var formDataType = new BackboneFormDataType();
 			attrs = formDataType.getFormElements(this.rangerServiceDefModel.get('resources'),this.rangerServiceDefModel.get('enums'), attrs, this);
-
+			
 			var attr1 = _.pick(_.result(this.model,'schemaBase'), 'name','isEnabled');
-			var attr2 = _.pick(_.result(this.model,'schemaBase'),'description', 'isRecursive', 'isAuditEnabled');
+			var attr2 = _.pick(_.result(this.model,'schemaBase'),schemaNames);
 			return _.extend(attr1,_.extend(attrs,attr2));
 		},
 		/** on render callback */
@@ -108,7 +100,7 @@ define(function(require){
 			var that = this;
 			
 			Backbone.Form.prototype.render.call(this, options);
-
+			//initialize path plugin for hdfs component : resourcePath
 			if(!_.isUndefined(this.initilializePathPlugin) && this.initilializePathPlugin){ 
 				this.initializePathPlugins();
 			}
@@ -129,13 +121,18 @@ define(function(require){
 		},
 		setupForm : function() {
 			_.each(this.model.attributes.resources,function(obj,key){
-				this.model.set(key, obj.values.toString())
+				this.model.set(key, obj.values.toString());
+				if(!_.isUndefined(obj.isRecursive))
+					this.model.set('isRecursive', obj.isRecursive);
+				
 			},this)
 		},
 		setUpSwitches :function(){
 			var that = this;
 			this.fields.isAuditEnabled.editor.setValue(this.model.get('isAuditEnabled'));
 			this.fields.isEnabled.editor.setValue(this.model.get('isEnabled'));
+			if(!_.isUndefined(this.fields.isRecursive))
+				this.fields.isRecursive.editor.setValue(this.model.get('isRecursive'));
 		},
 		/** all custom field rendering */
 		renderCustomFields: function(){
@@ -155,12 +152,12 @@ define(function(require){
 					cache :true,
 					data : params
 				}).done(function(){
-					that.$('[data-customfields="groupPerms"]').html(new GroupPermList({
+					that.$('[data-customfields="groupPerms"]').html(new PermissionList({
 						collection : that.formInputList,
 						groupList  : that.groupList,
 						userList   : that.userList,
-						model : that.model,
-						accessTypes : accessType,
+						model 	   : that.model,
+						accessTypes: accessType,
 						rangerServiceDefModel : that.rangerServiceDefModel
 					}).render().el);
 			});
@@ -169,7 +166,7 @@ define(function(require){
 	
 		beforeSave : function(){
 			var that = this, resources = [];
-			this.model.set('service',this.rangerService.get('name'));
+
 			var resources = {};
 			_.each(this.rangerServiceDefModel.get('resources'),function(obj){
 				if(!_.isNull(obj)){
@@ -189,12 +186,13 @@ define(function(require){
 			var RangerPolicyItem = Backbone.Collection.extend();
 			var policyItemList = new RangerPolicyItem();
 			policyItemList = this.setPermissionsToColl(this.formInputList, policyItemList);
-			this.model.set('policyItems', policyItemList)
 			
-			//Unset attrs which are not needed 
+			this.model.set('policyItems', policyItemList)
+			this.model.set('service',this.rangerService.get('name'));			
+			/*//Unset attrs which are not needed 
 			_.each(this.model.attributes.resources,function(obj,key){
 				this.model.unset(key, obj.values.toString())
-			},this)
+			},this)*/
 			
 		},
 		setPermissionsToColl : function(list, policyItemList) {
@@ -321,25 +319,12 @@ define(function(require){
 			        	that.fields[that.pathFieldName].$el.find('.help-inline').html('Please enter valid resource path : ' + ui.tagLabel);
 			        	return false;
 			        }
-//			        this.value = tags;
-			        /*if(_.contains(ui.tagLabel,','))
-			        	tags = ui.tagLabel.split(',');
-			        	this.value = tags;*/
 					}
 			});
-			/*this.fields.name.editor.$el.tagit({
-				beforeTagAdded: function(event, ui) {
-		        // do something special
-				var tags =  [];
-		        console.log(ui.tag);
-		        if(_.contains(ui.tagLabel,','))
-		        	tags = ui.tagLabel.split(',');
-		        	this.value = tags;
-				}
-			});*/
+	
 			
 		},
-		getPlugginAttr :function(autocomplete, searchType){
+		getPlugginAttr :function(autocomplete, searchType, lookupURL){
 			var that =this;
 			var type = searchType;
 			if(!autocomplete)
@@ -349,7 +334,6 @@ define(function(require){
 				
 				return {
 					closeOnSelect : true,
-					//placeholder : 'Select User',
 					tags:true,
 					multiple: true,
 					minimumInputLength: 1,
@@ -372,24 +356,8 @@ define(function(require){
 							};
 						}
 					},
-					/*query: function (query) {
-						var url = "service/assets/hive/resources";
-						var data = _.extend(that.getDataParams(type, query.term));
-						//var results = [ {id: query.term, path: query.term}];
-
-						$.get(url, data, function (resp) {
-							var serverRes = [];
-							if(resp.resultSize){
-								serverRes = resp.vXStrings.map(function(m, i){	return {id : m.text, path: m.text};	});
-							}
-							query.callback({results: serverRes});
-						}, 'json');
-
-						//query.callback({results: results});
-					},*/
-
 					ajax: { 
-						url: "service/assets/hive/resources",
+						url: lookupURL,
 						dataType: 'json',
 						params : {
 							timeout: 3000
@@ -417,13 +385,6 @@ define(function(require){
 									resultSize : 0
 								});
 							});
-							/*$.ajax.error(function(data) { 
-								console.log("ajax failed");
-								return {
-									results : []
-								};
-							});*/
-
 						}
 
 					},	
@@ -446,5 +407,5 @@ define(function(require){
 		},
 	});
 
-	return PolicyForm;
+	return RangerPolicyForm;
 });

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/e551d589/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 74e393e..eec4484 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js
@@ -39,10 +39,10 @@ define(function(require){
 	require('backgrid-paginator');
 	require('bootbox');
 
-	var PolicyTableLayout = Backbone.Marionette.Layout.extend(
-	/** @lends PolicyTableLayout */
+	var RangerPolicyTableLayout = Backbone.Marionette.Layout.extend(
+	/** @lends RangerPolicyTableLayout */
 	{
-		_viewName : 'PolicyTableLayout',
+		_viewName : 'RangerPolicyTableLayout',
 		
     	template: RangerPolicyTableLayoutTmpl,
 
@@ -79,7 +79,7 @@ define(function(require){
 		/** ui events hash */
 		events: function() {
 			var events = {};
-			events['click ' + this.ui.btnDeletePolicy]  = 'onDelete';
+//			events['click ' + this.ui.btnDeletePolicy]  = 'onDelete';
 			events['click ' + this.ui.btnShowMore]  = 'onShowMore';
 			events['click ' + this.ui.btnShowLess]  = 'onShowLess';
 			
@@ -87,11 +87,11 @@ define(function(require){
 		},
 
     	/**
-		* intialize a new PolicyTableLayout Layout 
+		* intialize a new RangerPolicyTableLayout Layout 
 		* @constructs
 		*/
 		initialize: function(options) {
-			console.log("initialized a PolicyTableLayout Layout");
+			console.log("initialized a RangerPolicyTableLayout Layout");
 
 			_.extend(this, _.pick(options,'rangerService'));
 			
@@ -157,40 +157,6 @@ define(function(require){
 					editable: false,
 					sortable : false
 				},	
-		/*		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) {
-							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",
@@ -217,118 +183,12 @@ define(function(require){
 					drag : false,
 					sortable : false
 				},
-				/*isRecursive:{
-					label:localization.tt('lbl.includesAllPathsRecursively'),
-					cell :"html",
-					editable:false,
-					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
-						fromRaw: function (rawValue) {
-							var status;
-							_.each(_.toArray(XAEnums.BooleanValue),function(m){
-								if(parseInt(rawValue) == m.value){
-									status =  (m.label == XAEnums.BooleanValue.BOOL_TRUE.label) ? true : false;
-								}	
-							});
-							return status ? '<label class="label label-success">YES</label>' : '<label class="label label">NO</label>';
-						}
-					}),
-					click : false,
-					drag : false,
-					sortable : false
-				},
-				permMapList : {
-					reName : 'groupName',
-					cell	: Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
-					label : localization.tt("lbl.groups"),
-					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
-						fromRaw: function (rawValue) {
-							if(!_.isUndefined(rawValue))
-								return XAUtil.showGroups(rawValue);
-							else
-							return '--';
-						}
-					}),
-					editable : false,
-					sortable : false
-				},
-				auditList : {
-					label : localization.tt("lbl.auditLogging"),
-					cell: "html",
-					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
-						fromRaw: function (rawValue, model) {
-							return model.has('auditList') ? '<label class="label label-success">ON</label>' : '<label class="label label">OFF</label>';
-						}
-					}),
-					click : false,
-					drag : false,
-					sortable : false,
-					editable : false
-				},
-				isEncrypt:{
-					label:localization.tt("lbl.encrypted"),
-					cell :"Switch",
-					editable:false,
-				//	canHeaderFilter : true,
-				//	headerFilterList :[{label : 'ON',value : 1},{label :'OFF' ,value:2}],
-					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
-						fromRaw: function (rawValue) {
-							var status;
-							_.each(_.toArray(XAEnums.BooleanValue),function(m){
-								if(parseInt(rawValue) == m.value){
-									status =  (m.label == XAEnums.BooleanValue.BOOL_TRUE.label) ? true : false;
-									return ;
-								}	
-							});
-							//You can use rawValue to custom your html, you can change this value using the name parameter.
-							return status;
-						}
-					}),
-					click : false,
-					drag : false,
-					onText : 'ON',
-					offText : 'OFF',
-					sortable : false
-				},
-				resourceStatus:{
-					label:localization.tt('lbl.status'),
-					cell :"html",
-					editable:false,
-					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
-						fromRaw: function (rawValue) {
-							var status;
-							_.each(_.toArray(XAEnums.BooleanValue),function(m){
-								if(parseInt(rawValue) == m.value){
-									status =  (m.label == XAEnums.BooleanValue.BOOL_TRUE.label) ? true : false;
-								}	
-							});
-							return status ? '<label class="label label-success">Enabled</label>' : '<label class="label label-important">Disabled</label>';
-						}
-					}),
-					click : false,
-					drag : false,
-					sortable : false
-				},
-				permissions : {
-					cell :  "html",
-					label : localization.tt("lbl.action"),
-					formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
-						fromRaw: function (rawValue,model) {
-							return '<a href="#!/hdfs/'+model.get('assetId')+'/policy/'+model.id+'" class="btn btn-mini" title="Edit"><i class="icon-edit icon-large" /></a>\
-									<a href="javascript:void(0);" data-name ="deletePolicy" data-id="'+model.id+'"  class="btn btn-mini btn-danger" title="Delete"><i class="icon-trash icon-large" /></a>';
-							//You can use rawValue to custom your html, you can change this value using the name parameter.
-						}
-					}),
-					editable: false,
-					sortable : false
-
-				}
-*/				
 			};
 			_.each(this.rangerServiceDefModel.get('resources'), function(obj){
 				if(!_.isUndefined(obj) && !_.isNull(obj))
 					 cols[obj.name]={
 							cell : "html",
-							label	: obj.name,
+							label	: XAUtil.capitaliseFirstLetter(obj.name),
 							editable: false,
 							sortable : false,
 							formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
@@ -432,5 +292,5 @@ define(function(require){
 
 	});
 
-	return PolicyTableLayout; 
+	return RangerPolicyTableLayout; 
 });