You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ve...@apache.org on 2015/03/20 09:19:20 UTC
[1/2] incubator-ranger git commit: RANGER-200: Pagination on
Analytics Page (Gautam Borad via Velmurugan Periasamy)
Repository: incubator-ranger
Updated Branches:
refs/heads/master 4bf8a3fae -> 85d5658fc
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js b/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js
index de713d9..9e689c0 100644
--- a/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js
+++ b/security-admin/src/main/webapp/scripts/views/reports/UserAccessLayout.js
@@ -28,7 +28,9 @@ define(function(require) {'use strict';
var XATableLayout = require('views/common/XATableLayout');
var localization = require('utils/XALangSupport');
- var VXResourceList = require('collections/VXResourceList');
+ var RangerService = require('models/RangerService');
+ var RangerServiceDefList= require('collections/RangerServiceDefList');
+ var RangerPolicyList = require('collections/RangerPolicyList');
var UseraccesslayoutTmpl= require('hbs!tmpl/reports/UserAccessLayout_tmpl');
var UserAccessLayout = Backbone.Marionette.Layout.extend(
@@ -39,22 +41,21 @@ define(function(require) {'use strict';
template : UseraccesslayoutTmpl,
breadCrumbs : [XALinks.get('UserAccessReport')],
templateHelpers :function(){
- return {groupList : this.groupList};
+ return {
+ groupList : this.groupList,
+ policyHeaderList : this.policyCollList
+ };
},
/** Layout sub regions */
- regions : {
- 'rHdfsTableList' : 'div[data-id="r_hdfsTable"]',
- 'rHiveTableList' : 'div[data-id="r_hiveTable"]',
- 'rHbaseTableList' : 'div[data-id="r_hbaseTable"]',
- 'rKnoxTableList' : 'div[data-id="r_knoxTable"]',
- 'rStormTableList' : 'div[data-id="r_stormTable"]',
- 'rHdfsTableSpinner' : '[data-id="r_hdfsTableSpinner"]',
- 'rHiveTableSpinner' : '[data-id="r_hiveTableSpinner"]',
- 'rHbaseTableSpinner': '[data-id="r_hbaseTableSpinner"]',
- 'rKnoxTableSpinner' : '[data-id="r_knoxTableSpinner"]',
- 'rStormTableSpinner': '[data-id="r_stormTableSpinner"]'
+ regions :function(){
+ var regions = {};
+ this.initializeRequiredData();
+ _.each(this.policyCollList, function(obj) {
+ regions[obj.collName+'Table'] = 'div[data-id="'+obj.collName+'"]';
+ },this)
+ return regions;
},
/** ui selector cache */
@@ -99,24 +100,169 @@ define(function(require) {'use strict';
initialize : function(options) {
console.log("initialized a UserAccessLayout Layout");
_.extend(this, _.pick(options, 'groupList','userList'));
-
- var params = [];
- this.hdfsResourceList = new VXResourceList();
- this.hiveResourceList = new VXResourceList();
- this.hbaseResourceList = new VXResourceList();
- this.knoxResourceList = new VXResourceList();
- this.stormResourceList = new VXResourceList();
this.bindEvents();
- },
+ },
+ initializeRequiredData : function() {
+ this.policyCollList = [];
+ this.initializeServiceDef();
+ this.serviceDefList.each(function(servDef) {
+ var serviceDefName = servDef.get('name')
+ var collName = serviceDefName +'PolicyList';
+ this[collName] = new RangerPolicyList();
+ this.defaultPageState = this[collName].state;
+ this.policyCollList.push({ 'collName' : collName, 'serviceDefName' : serviceDefName})
+ },this);
+ },
+ initializeServiceDef : function() {
+ this.serviceDefList = new RangerServiceDefList();
+// this.serviceDefList.queryParams.sortBy = 'id';
+ this.serviceDefList.fetch({
+ cache : false,
+ async:false
+ });
+ },
/** all events binding here */
bindEvents : function() {
/*this.listenTo(this.model, "change:foo", this.modelChanged, this);*/
/*this.listenTo(communicator.vent,'someView:someEvent', this.someEventHandler, this)'*/
- this.listenTo(this.hiveResourceList, "change:foo", function(){alert();}, this);
+// this.listenTo(this.hiveResourceList, "change:foo", function(){alert();}, this);
},
+ onRender : function() {
+ this.initializePlugins();
+ this.setupGroupAutoComplete();
+ //Show policies listing for each service and GET policies for each service
+ _.each(this.policyCollList, function(obj,i){
+ this.renderTable(obj.collName, obj.serviceDefName);
+ this.getResourceLists(obj.collName,obj.serviceDefName);
+ },this);
+ },
+
+ getResourceLists: function(collName, serviceDefName){
+ var that = this, coll = this[collName];
+ coll.queryParams.serviceType = serviceDefName;
+ /* if(!_.isUndefined(params)){
+ _.each(params,function(val, attr){
+ if(!_.isUndefined(val) && !_.isEmpty(val))
+ coll.queryParams[attr] = val;
+ });
+ }*/
+ coll.fetch({
+ cache : false,
+ reset: true,
+ async:false,
+ }).done(function(){
+// console.log(coll);
+ coll.trigger('sync')
+// if(coll.queryParams.assetType == XAEnums.AssetType.ASSET_STORM.value){
+// var totalRecords=0;
+// _.each(that.resourceList, function( list ){ totalRecords += list.state.totalRecords; });
+ /*that.$('[data-js="searchResult"]').html('Total '+totalRecords+' records found.');
+ that.$('[data-js="hdfsSearchResult"]').html(that.hdfsResourceList.state.totalRecords +' records found.');
+ that.$('[data-js="hiveSearchResult"]').html(that.hiveResourceList.state.totalRecords +' records found.');
+ that.$('[data-js="hbaseSearchResult"]').html(that.hbaseResourceList.state.totalRecords +' records found.');
+ that.$('[data-js="knoxSearchResult"]').html(that.knoxResourceList.state.totalRecords +' records found.');
+ that.$('[data-js="stormSearchResult"]').html(that.stormResourceList.state.totalRecords +' records found.');*/
+// }
+ XAUtil.blockUI('unblock');
+
+ });
+ },
+ renderTable : function(collName){
+ var that = this, tableRegion = this[collName+'Table'];
+ tableRegion.show(new XATableLayout({
+ columns: this.getColumns(this[collName]),
+ collection: this[collName],
+ includeFilter : false,
+ scrollToTop : false,
+ paginationCache : false,
+ gridOpts : {
+ row : Backgrid.Row.extend({}),
+ emptyText : 'No Policies found!'
+ }
+ }));
+
+ },
+ getColumns : function(coll){
+ var that = this;
+ var cols = {
+ name : {
+ cell : "uri",
+ href: function(model){
+ var rangerService = new RangerService();
+ rangerService.urlRoot += '/name/'+model.get('service');
+ rangerService.fetch({
+ cache : true,
+ async : false
+ });
+ return '#!/service/'+rangerService.get('id')+'/policies/'+model.id+'/edit';
+ },
+ label : localization.tt("lbl.policyName"),
+ editable: false,
+ sortable : false
+ },
+ isEnabled:{
+ label:localization.tt('lbl.status'),
+ cell :"html",
+ editable:false,
+ formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+ fromRaw: function (rawValue) {
+ return rawValue ? '<label class="label label-success">Enabled</label>' : '<label class="label label-important">Disabled</label>';
+ }
+ }),
+ click : false,
+ drag : false,
+ sortable : false
+ },
+ isAuditEnabled:{
+ label:localization.tt('lbl.auditLogging'),
+ cell :"html",
+ editable:false,
+ formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+ fromRaw: function (rawValue) {
+ return rawValue ? '<label class="label label-success">Enabled</label>' : '<label class="label label-important">Disabled</label>';
+ }
+ }),
+ click : false,
+ drag : false,
+ sortable : false
+ },
+ policyItems : {
+ reName : 'groupName',
+ cell : Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
+ label : localization.tt("lbl.group"),
+ formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+ fromRaw: function (rawValue, model) {
+ if(!_.isUndefined(rawValue))
+ return XAUtil.showGroupsOrUsersForPolicy(rawValue, model);
+ else
+ return '--';
+ }
+ }),
+ editable : false,
+ sortable : false
+ },
+ //Hack for backgrid plugin doesn't allow to have same column name
+ guid : {
+ reName : 'userName',
+ cell : Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
+ label : localization.tt("lbl.users"),
+ formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+ fromRaw: function (rawValue, model) {
+ if(!_.isUndefined(rawValue))
+ return XAUtil.showGroupsOrUsersForPolicy(model.get('policyItems'), model, false);
+ else
+ return '--';
+ }
+ }),
+ editable : false,
+ sortable : false
+ },
+ };
+ return coll.constructor.getTableCols(cols, coll);
+ },
/** on render callback */
setupGroupAutoComplete : function(){
//tags : true,
@@ -128,7 +274,7 @@ define(function(require) {'use strict';
return {id : m.id,text : m.get('name')};
}),*/
this.groupArr = this.groupList.map(function(m){
- return { id : m.id , text : m.get('name')};
+ return { id : m.get('name') , text : m.get('name')};
});
var that = this, arr = [];
this.ui.userGroup.select2({
@@ -137,14 +283,14 @@ define(function(require) {'use strict';
// maximumSelectionSize : 1,
width :'220px',
tokenSeparators: [",", " "],
- tags : this.groupArr,
+ // tags : this.groupArr,
initSelection : function (element, callback) {
var data = [];
console.log(that.groupList);
$(element.val().split(",")).each(function () {
var obj = _.findWhere(that.groupArr,{id:this});
- data.push({id: this, text: obj.text});
+ data.push({id: obj.text, text: obj.text});
});
callback(data);
},
@@ -159,10 +305,10 @@ define(function(require) {'use strict';
if(!_.isEmpty(that.ui.userGroup.val()))
selectedVals = that.ui.userGroup.val().split(',');
if(data.resultSize != "0"){
- results = data.vXGroups.map(function(m, i){ return {id : (m.id).toString(), text: m.name}; });
- if(!_.isEmpty(selectedVals))
- results = XAUtil.filterResultByIds(results, selectedVals);
- return {results : results};
+ results = data.vXGroups.map(function(m, i){ return {id : m.name, text: m.name}; });
+ if(!_.isEmpty(selectedVals))
+ results = XAUtil.filterResultByIds(results, selectedVals);
+ return {results : results};
}
return {results : results};
}
@@ -189,10 +335,10 @@ define(function(require) {'use strict';
// minimumInputLength: 1,
closeOnSelect : true,
placeholder : 'Select User',
- // maximumSelectionSize : 1,
+// maximumSelectionSize : 1,
width :'220px',
tokenSeparators: [",", " "],
- tags : this.userArr,
+ // tags : this.userArr,
initSelection : function (element, callback) {
var data = [];
$(element.val().split(",")).each(function () {
@@ -212,10 +358,10 @@ define(function(require) {'use strict';
if(!_.isEmpty(that.ui.userName.select2('val')))
selectedVals = that.ui.userName.select2('val');
if(data.resultSize != "0"){
- results = data.vXUsers.map(function(m, i){ return {id : m.id+"", text: m.name}; });
- if(!_.isEmpty(selectedVals))
- results = XAUtil.filterResultByIds(results, selectedVals);
- return {results : results};
+ results = data.vXUsers.map(function(m, i){ return {id : m.id+"", text: m.name}; });
+ if(!_.isEmpty(selectedVals))
+ results = XAUtil.filterResultByIds(results, selectedVals);
+ return {results : results};
}
return {results : results};
}
@@ -229,896 +375,8 @@ define(function(require) {'use strict';
formatNoMatches: function(result){
return 'No user found.';
}
-
- }).on('select2-focus', XAUtil.select2Focus);
- },
- getResourceLists: function(params){
- var that = this;
-
- var resourceList = new VXResourceList();
- if(!_.isUndefined(params)){
- XAUtil.blockUI();
- resourceList.setPageSize(200, {fetch : false});
- resourceList.fetch({
- data : params,
- cache : false,
- success : function(){
- XAUtil.blockUI('unblock');
- },
- error : function(){XAUtil.blockUI('unblock');}
- }).done(function(){
- //console.log(resourceList);
- XAUtil.blockUI('unblock');
- //console.log(resourceList);
- XAUtil.blockUI('unblock');
- var obj = resourceList.groupBy('assetType');
- var hdfsList = !_.isUndefined(obj[XAEnums.AssetType.ASSET_HDFS.value]) ? obj[XAEnums.AssetType.ASSET_HDFS.value] : [];
- that.hdfsResourceList.reset(hdfsList);
- var hiveList = !_.isUndefined(obj[XAEnums.AssetType.ASSET_HIVE.value]) ? obj[XAEnums.AssetType.ASSET_HIVE.value] : [];
- that.hiveResourceList.reset(hiveList);
- var hbaseList= !_.isUndefined(obj[XAEnums.AssetType.ASSET_HBASE.value]) ? obj[XAEnums.AssetType.ASSET_HBASE.value] : [];
- that.hbaseResourceList.reset(hbaseList);
- var knoxList= !_.isUndefined(obj[XAEnums.AssetType.ASSET_KNOX.value]) ? obj[XAEnums.AssetType.ASSET_KNOX.value] : [];
- that.knoxResourceList.reset(knoxList);
- var stormList= !_.isUndefined(obj[XAEnums.AssetType.ASSET_STORM.value]) ? obj[XAEnums.AssetType.ASSET_STORM.value] : [];
- that.stormResourceList.reset(stormList);
-
-
- if(!_.isEmpty(params)){
- var totalRecords = hdfsList.length + hiveList.length + hbaseList.length + knoxList.length + stormList.length;
- that.$('[data-js="searchResult"]').html('Total '+totalRecords+' records found.');
- that.$('[data-js="hdfsSearchResult"]').html(hdfsList.length +' records found.');
- that.$('[data-js="hiveSearchResult"]').html(hiveList.length +' records found.');
- that.$('[data-js="hbaseSearchResult"]').html(hbaseList.length +' records found.');
- that.$('[data-js="knoxSearchResult"]').html(knoxList.length +' records found.');
- that.$('[data-js="stormSearchResult"]').html(stormList.length +' records found.');
- }
- });
- }else{
- var obj = this.collection.groupBy('assetType');
- var hdfsList = !_.isUndefined(obj[XAEnums.AssetType.ASSET_HDFS.value]) ? obj[XAEnums.AssetType.ASSET_HDFS.value] : [];
- that.hdfsResourceList.reset(hdfsList);
- var hiveList = !_.isUndefined(obj[XAEnums.AssetType.ASSET_HIVE.value]) ? obj[XAEnums.AssetType.ASSET_HIVE.value] : [];
- that.hiveResourceList.reset(hiveList);
- var hbaseList= !_.isUndefined(obj[XAEnums.AssetType.ASSET_HBASE.value]) ? obj[XAEnums.AssetType.ASSET_HBASE.value] : [];
- that.hbaseResourceList.reset(hbaseList);
- var knoxList= !_.isUndefined(obj[XAEnums.AssetType.ASSET_KNOX.value]) ? obj[XAEnums.AssetType.ASSET_KNOX.value] : [];
- that.knoxResourceList.reset(knoxList);
- var stormList= !_.isUndefined(obj[XAEnums.AssetType.ASSET_STORM.value]) ? obj[XAEnums.AssetType.ASSET_STORM.value] : [];
- that.stormResourceList.reset(stormList);
- }
-
- },
- onRender : function() {
- this.initializePlugins();
- this.setupGroupAutoComplete();
- this.getResourceLists();
- this.renderHdfsTable();
- this.renderHiveTable();
- this.renderHbaseTable();
- this.renderKnoxTable();
- this.renderStormTable();
- //this.listenTo(this.hiveResourceList, "reset", function(){alert();}, this);
- },
- renderHdfsTable : function(){
- var that = this;
-
- this.rHdfsTableList.show(new XATableLayout({
- columns: this.getHdfsColumns(),
- collection: this.hdfsResourceList,
- includeFilter : false,
- includePagination : false,
- gridOpts : {
- row : Backgrid.Row.extend({}),
- header : XABackgrid,
- emptyText : 'No Policies found!'
- }
- /*filterOpts : {
- name: ['name'],
- placeholder: localization.tt('plcHldr.searchByResourcePath'),
- wait: 150
- }*/
- }));
-
- },
- renderHiveTable : function(){
- var that = this;
-
- this.rHiveTableList.show(new XATableLayout({
- columns: this.getHiveColumns(),
- collection: this.hiveResourceList,
- includeFilter : false,
- includePagination : false,
- gridOpts : {
- //row: TableRow,
- header : XABackgrid,
- emptyText : 'No Policies found!'
- }
- /*filterOpts : {
- name: ['name'],
- placeholder: localization.tt('plcHldr.searchByResourcePath'),
- wait: 150
- }*/
- }));
-
- },
- renderHbaseTable : function(){
- var that = this;
-
- this.rHbaseTableList.show(new XATableLayout({
- columns: this.getHbaseColumns(),
- collection: this.hbaseResourceList,
- includeFilter : false,
- includePagination : false,
- gridOpts : {
- //row: TableRow,
- header : XABackgrid,
- emptyText : 'No Policies found!'
- }
- /*filterOpts : {
- name: ['name'],
- placeholder: localization.tt('plcHldr.searchByResourcePath'),
- wait: 150
- }*/
- }));
-
- },
- renderKnoxTable : function(){
- var that = this;
-
- this.rKnoxTableList.show(new XATableLayout({
- columns: this.getKnoxColumns(),
- collection: this.knoxResourceList,
- includeFilter : false,
- includePagination : false,
- gridOpts : {
- //row: TableRow,
- header : XABackgrid,
- emptyText : 'No Policies found!'
- }
- /*filterOpts : {
- name: ['name'],
- placeholder: localization.tt('plcHldr.searchByResourcePath'),
- wait: 150
- }*/
- }));
-
- },
- renderStormTable : function(){
- var that = this;
-
- this.rStormTableList.show(new XATableLayout({
- columns: this.getStormColumns(),
- collection: this.stormResourceList,
- includeFilter : false,
- includePagination : false,
- gridOpts : {
- //row: TableRow,
- header : XABackgrid,
- emptyText : 'No Policies found!'
- }
- /*filterOpts : {
- name: ['name'],
- placeholder: localization.tt('plcHldr.searchByResourcePath'),
- wait: 150
- }*/
- }));
-
- },
- getHdfsColumns : function(){
- var that = this;
- var cols = {
- policyName : {
- cell : "uri",
- href: function(model){
- return '#!/hdfs/'+model.get('assetId')+'/policy/' + model.id;
- },
- label : localization.tt("lbl.policyName"),
- editable: false,
- sortable : false
- },
- name : {
- cell : "html",
- label : localization.tt("lbl.resourcePath"),
- editable: false,
- sortable : false,
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) {
- return _.isUndefined(rawValue) ? '--': '<span title="'+rawValue+'">'+rawValue+'</span>';
- }
- })
- },
- assetName : {
- label : localization.tt("lbl.repository"),
- cell: "String",
- click : false,
- drag : false,
- editable: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 ? "Yes" : "No";
- return status ? '<label class="label label-success">YES</label>' : '<label class="label label">NO</label>';
- }
- }),
- click : false,
- drag : false,
- sortable: false
- },
- auditList : {
- label : localization.tt("lbl.auditLogging"),
- cell: "html",
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue, model) {
- //return model.has('auditList') ? 'On' : 'Off';
- 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
- },
- permMapListUser : {
- name : 'permMapList',
- reName : 'userName',
- cell : Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
- label : localization.tt("lbl.users"),
- // canHeaderSearch : true,
- // headerSearchStyle : 'width:85%;',
- placeholder : 'User(s)',
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) {
- var showMoreLess = false;
- if(_.isArray(rawValue))
- rawValue = new Backbone.Collection(rawValue);
- if(!_.isUndefined(rawValue) && rawValue.models.length > 0){
- var userArr = _.uniq(_.compact(_.map(rawValue.models, function(m, i){
- if(m.has('userName'))
- return m.get('userName') ;
- })));
- if(userArr.length > 0)
- var resourceId =rawValue.models[0].attributes.resourceId;
- var newUserArr = _.map(userArr, function(name, i){
- if(i >= 4)
- return '<span class="label label-info" policy-user-id="'+resourceId+'" style="display:none;">' + name + '</span>';
- else if(i == 3 && userArr.length > 4){
- showMoreLess = true;
- return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
- }
- else
- return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
- });
- if(showMoreLess){
- newUserArr.push('<span class="pull-left"><a href="javascript:void(0);" data-id="showMoreUsers" class="" policy-user-id="'+resourceId+'"><code> + More..</code></a></span>\
- <span class="pull-left" ><a href="javascript:void(0);" data-id="showLessUsers" class="" policy-user-id="'+resourceId+'" style="display:none;"><code> - Less..</code></a></span>');
- }
- return newUserArr.length ? newUserArr.join(' ') : '--';
- }else
- return '--';
- }
- }),
- editable:false,
- sortable: false
- },
- permMapList : {
- reName : 'groupName',
- cell : Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
- label : localization.tt("lbl.groups"),
- // canHeaderSearch : true,
- // headerSearchStyle : 'width:85%;',
- placeholder : 'Group Name',
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) {
- return XAUtil.showGroups(rawValue);
- }
- }),
- 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'
- },*/
- /*permissions : {
- cell : "html",
- label : localization.tt("lbl.action"),
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue,model) {
- return '<a href="#!/policy/'+model.id+'" class="btn btn-mini "><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"><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,
-
- },
- */
-
- };
- return this.hdfsResourceList.constructor.getTableCols(cols, this.hdfsResourceList);
- },
- getHiveColumns : function(){
- var that = this;
- var cols = {
- policyName : {
- cell : "uri",
- href: function(model){
- return '#!/hive/'+model.get('assetId')+'/policy/' + model.id;
- },
- label : localization.tt("lbl.policyName"),
- editable: false,
- sortable : false
- },
- databases : {
- cell :'html',
- label : localization.tt("lbl.databaseName")+'(s)',
- editable:false,
- sortable : false,
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) {
- return _.isUndefined(rawValue) ? '--': '<span title="'+rawValue+'">'+rawValue+'</span>';
- }
- })
- },
- tables : {
- label : localization.tt("lbl.tableName")+'(s)',
- cell :'html',
- editable:false,
- sortable : false,
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) {
- return _.isUndefined(rawValue) ? '--': '<span title="'+rawValue+'">'+rawValue+'</span>';
- }
- })
- },
- /*views : {
- label : localization.tt("lbl.viewName")+'(s)',
- editable:false,
- cell :'string',
- sortable: false,
- // headerSearchStyle : 'width:85%;',
- //headerFilterList :["Student","Teacher","StudentTeacher"],
- placeholder : 'View Name',
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) { return rawValue ? rawValue : '--';}
- }),
- },*/
- udfs : {
- label : localization.tt("lbl.udfName")+'(s)',
- editable:false,
- cell :'string',
- sortable: false,
- // headerSearchStyle : 'width:85%;',
- //headerFilterList :["Student","Teacher","StudentTeacher"],
- placeholder : 'UDF Name',
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) { return rawValue ? rawValue : '--';}
- })
- },
- columns : {
- label : localization.tt("lbl.columnName")+'(s)',
- cell :'html',
- placeholder : 'Column Name',
- editable:false,
- sortable : false,
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) {
- return _.isUndefined(rawValue) ? '--': '<span title="'+rawValue+'">'+rawValue+'</span>';
- }
- })
-
- },
- assetName : {
- label : localization.tt("lbl.repository"),
- cell: "String",
- click : false,
- drag : false,
- 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') ? 'On' : 'Off';
- 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
- },
- permMapListUser : {
- name : 'permMapList',
- reName : 'userName',
- cell : Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
- label : localization.tt("lbl.users"),
- placeholder : 'User(s)',
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) {
- var showMoreLess = false;
- if(_.isArray(rawValue))
- rawValue = new Backbone.Collection(rawValue);
- if(!_.isUndefined(rawValue) && rawValue.models.length > 0){
- var userArr = _.uniq(_.compact(_.map(rawValue.models, function(m, i){
- if(m.has('userName'))
- return m.get('userName') ;
- })));
- if(userArr.length > 0)
- var resourceId =rawValue.models[0].attributes.resourceId;
- var newUserArr = _.map(userArr, function(name, i){
- if(i >= 4)
- return '<span class="label label-info" policy-user-id="'+resourceId+'" style="display:none;">' + name + '</span>';
- else if(i == 3 && userArr.length > 4){
- showMoreLess = true;
- return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
- }
- else
- return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
- });
- if(showMoreLess){
- newUserArr.push('<span class="pull-left"><a href="javascript:void(0);" data-id="showMoreUsers" class="" policy-user-id="'+resourceId+'"><code> + More..</code></a></span>\
- <span class="pull-left" ><a href="javascript:void(0);" data-id="showLessUsers" class="" policy-user-id="'+resourceId+'" style="display:none;"><code> - Less..</code></a></span>');
- }
- return newUserArr.length ? newUserArr.join(' ') : '--';
- }else
- return '--';
- }
- }),
- editable:false,
- sortable: false
- },
- permMapList : {
- reName : 'groupName',
- cell : Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
- label : localization.tt("lbl.group"),
- // headerSearchStyle : 'width:85%;',
- placeholder : 'Group Name',
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) {
- return XAUtil.showGroups(rawValue);
- }
- }),
- sortable: false,
- editable:false
- }
- /*isEncrypt:{
- label:localization.tt("lbl.encrypted"),
- cell :"Switch",
- 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 ;
- }
- });
- //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'
- },*/
- /*permissions : {
- cell :"uri",
- label : localization.tt("lbl.action"),
- href: function(model){
- return '#!/hive/policy/' + model.id;
- },
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) {
- return 'Edit';
- //You can use rawValue to custom your html, you can change this value using the name parameter.
- }
- }),
- // klass : 'btn btn-mini btn-blue',
- editable:false,
- // iconKlass :'icon-edit',
- // iconTitle :'Edit'
-
-
- }*/
-
- };
- return this.hiveResourceList.constructor.getTableCols(cols, this.hiveResourceList);
- },
- getHbaseColumns : function(){
- var cols = {
- policyName : {
- cell : "uri",
- href: function(model){
- return '#!/hbase/'+model.get('assetId')+'/policy/' + model.id;
- },
- label : localization.tt("lbl.policyName"),
- editable: false,
- sortable : false
- },
- tables : {
- label : localization.tt("lbl.tableName")+'(s)',
- cell :'html',
- editable:false,
- sortable : false,
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) {
- return _.isUndefined(rawValue) ? '--': '<span title="'+rawValue+'">'+rawValue+'</span>';
- }
- })
- },
- columnFamilies : {
- label : localization.tt("lbl.columnFamilies")+'(s)',
- cell :'html',
- editable:false,
- sortable : false,
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) {
- return _.isUndefined(rawValue) ? '--': '<span title="'+rawValue+'">'+rawValue+'</span>';
- }
- })
-
- },
- assetName : {
- label : localization.tt("lbl.repository"),
- cell: "String",
- click : false,
- drag : false,
- 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') ? 'On' : 'Off';
- 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 :"html",
- editable:false,
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue, model) {
- return model.get('isEncrypt') == XAEnums.BooleanValue.BOOL_TRUE.value ? '<label class="label label-success">ON</label>' : '<label class="label label">OFF</label>';
- 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,
- sortable: false,
- onText : 'ON',
- offText : 'OFF'
- },*/
- permMapListUser : {
- name : 'permMapList',
- reName : 'userName',
- cell : Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
- label : localization.tt("lbl.users"),
- placeholder : 'User(s)',
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) {
- var showMoreLess = false;
- if(_.isArray(rawValue))
- rawValue = new Backbone.Collection(rawValue);
- if(!_.isUndefined(rawValue) && rawValue.models.length > 0){
- var userArr = _.uniq(_.compact(_.map(rawValue.models, function(m, i){
- if(m.has('userName'))
- return m.get('userName') ;
- })));
- if(userArr.length > 0)
- var resourceId =rawValue.models[0].attributes.resourceId;
- var newUserArr = _.map(userArr, function(name, i){
- if(i >= 4)
- return '<span class="label label-info" policy-user-id="'+resourceId+'" style="display:none;">' + name + '</span>';
- else if(i == 3 && userArr.length > 4){
- showMoreLess = true;
- return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
- }
- else
- return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
- });
- if(showMoreLess){
- newUserArr.push('<span class="pull-left"><a href="javascript:void(0);" data-id="showMoreUsers" class="" policy-user-id="'+resourceId+'"><code> + More..</code></a></span>\
- <span class="pull-left" ><a href="javascript:void(0);" data-id="showLessUsers" class="" policy-user-id="'+resourceId+'" style="display:none;"><code> - Less..</code></a></span>');
- }
- return newUserArr.length ? newUserArr.join(' ') : '--';
- }else
- return '--';
- }
- }),
- editable:false,
- sortable: false
- },
- permMapList : {
- reName : 'groupName',
- cell : Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
- label : localization.tt("lbl.group"),
- canHeaderSearch : false,
- // headerSearchStyle : 'width:70%;',
- placeholder : 'Group Name',
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) {
- return XAUtil.showGroups(rawValue);
- }
- }),
- sortable: false,
- editable:false
- }
-
-
- };
- return this.hbaseResourceList.constructor.getTableCols(cols, this.hbaseResourceList);
- },
- getKnoxColumns : function(){
- var cols = {
- policyName : {
- cell : "uri",
- href: function(model){
- return '#!/knox/'+model.get('assetId')+'/policy/' + model.id;
- },
- label : localization.tt("lbl.policyName"),
- editable: false,
- sortable : false
- },
- topologies : {
- label : localization.tt("lbl.topologyName")+'(s)',
- /*href: function(model){
- return '#!/knox/'+model.get('assetId')+'/policy/' + model.id;
- },*/
- editable:false,
- cell :'string',
- sortable : false
-
- },
- services: {
- label : localization.tt("lbl.serivceName")+'(s)',
- editable:false,
- cell :'string',
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) { return rawValue ? rawValue : '--';}
- }),
- sortable : false
- },
- assetName : {
- label : localization.tt("lbl.repository"),
- cell: "String",
- click : false,
- drag : false,
- 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
- },
- permMapListUser : {
- name : 'permMapList',
- reName : 'userName',
- cell : Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
- label : localization.tt("lbl.users"),
- placeholder : 'User(s)',
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) {
- var showMoreLess = false;
- if(_.isArray(rawValue))
- rawValue = new Backbone.Collection(rawValue);
- if(!_.isUndefined(rawValue) && rawValue.models.length > 0){
- var userArr = _.uniq(_.compact(_.map(rawValue.models, function(m, i){
- if(m.has('userName'))
- return m.get('userName') ;
- })));
- if(userArr.length > 0)
- var resourceId =rawValue.models[0].attributes.resourceId;
- var newUserArr = _.map(userArr, function(name, i){
- if(i >= 4)
- return '<span class="label label-info" policy-user-id="'+resourceId+'" style="display:none;">' + name + '</span>';
- else if(i == 3 && userArr.length > 4){
- showMoreLess = true;
- return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
- }
- else
- return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
- });
- if(showMoreLess){
- newUserArr.push('<span class="pull-left"><a href="javascript:void(0);" data-id="showMoreUsers" class="" policy-user-id="'+resourceId+'"><code> + More..</code></a></span>\
- <span class="pull-left" ><a href="javascript:void(0);" data-id="showLessUsers" class="" policy-user-id="'+resourceId+'" style="display:none;"><code> - Less..</code></a></span>');
- }
- return newUserArr.length ? newUserArr.join(' ') : '--';
- }else
- return '--';
- }
- }),
- editable:false,
- sortable: false
- },
- permMapList : {
- reName : 'groupName',
- cell : Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
- label : localization.tt("lbl.group"),
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) {
- if(!_.isUndefined(rawValue))
- return XAUtil.showGroups(rawValue);
- else
- return '--';
- }
- }),
- editable : false,
- sortable : false
- },
- };
- return this.knoxResourceList.constructor.getTableCols(cols, this.knoxResourceList);
- },
- getStormColumns : function(){
- var cols = {
- policyName : {
- cell : "uri",
- href: function(model){
- return '#!/knox/'+model.get('assetId')+'/policy/' + model.id;
- },
- label : localization.tt("lbl.policyName"),
- editable: false,
- sortable : false
- },
- topologies : {
- label : localization.tt("lbl.topologyName")+'(s)',
- /*href: function(model){
- return '#!/knox/'+model.get('assetId')+'/policy/' + model.id;
- },*/
- editable:false,
- cell :'string',
- sortable : false
-
- },
- /*services: {
- label : localization.tt("lbl.serivceName")+'(s)',
- editable:false,
- cell :'string',
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) { return rawValue ? rawValue : '--';}
- }),
- sortable : false
- },*/
- assetName : {
- label : localization.tt("lbl.repository"),
- cell: "String",
- click : false,
- drag : false,
- 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
- },
- permMapListUser : {
- name : 'permMapList',
- reName : 'userName',
- cell : Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
- label : localization.tt("lbl.users"),
- placeholder : 'User(s)',
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) {
- var showMoreLess = false;
- if(_.isArray(rawValue))
- rawValue = new Backbone.Collection(rawValue);
- if(!_.isUndefined(rawValue) && rawValue.models.length > 0){
- var userArr = _.uniq(_.compact(_.map(rawValue.models, function(m, i){
- if(m.has('userName'))
- return m.get('userName') ;
- })));
- if(userArr.length > 0)
- var resourceId =rawValue.models[0].attributes.resourceId;
- var newUserArr = _.map(userArr, function(name, i){
- if(i >= 4)
- return '<span class="label label-info" policy-user-id="'+resourceId+'" style="display:none;">' + name + '</span>';
- else if(i == 3 && userArr.length > 4){
- showMoreLess = true;
- return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
- }
- else
- return '<span class="label label-info" policy-user-id="'+resourceId+'">' + name + '</span>';
- });
- if(showMoreLess){
- newUserArr.push('<span class="pull-left"><a href="javascript:void(0);" data-id="showMoreUsers" class="" policy-user-id="'+resourceId+'"><code> + More..</code></a></span>\
- <span class="pull-left" ><a href="javascript:void(0);" data-id="showLessUsers" class="" policy-user-id="'+resourceId+'" style="display:none;"><code> - Less..</code></a></span>');
- }
- return newUserArr.length ? newUserArr.join(' ') : '--';
- }else
- return '--';
- }
- }),
- editable:false,
- sortable: false
- },
- permMapList : {
- reName : 'groupName',
- cell : Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
- label : localization.tt("lbl.group"),
- formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
- fromRaw: function (rawValue) {
- if(!_.isUndefined(rawValue))
- return XAUtil.showGroups(rawValue);
- else
- return '--';
- }
- }),
- editable : false,
- sortable : false
- },
- };
- return this.stormResourceList.constructor.getTableCols(cols, this.stormResourceList);
+ }).on('select2-focus', XAUtil.select2Focus);
},
/** all post render plugin initialization */
initializePlugins : function() {
@@ -1155,14 +413,27 @@ define(function(require) {'use strict';
},
onSearch : function(e){
- var that = this;
+ var that = this, type;
+ // XAUtil.blockUI();
+ //Get search values
var groups = (this.ui.userGroup.is(':visible')) ? this.ui.userGroup.select2('val'):undefined;
var users = (this.ui.userName.is(':visible')) ? this.ui.userName.select2('val'):undefined;
- var rxName = this.ui.resourceName.val();
- var policyName = this.ui.policyName.val();
- var params = {groupId : groups,userId : users,name : rxName, policyName : policyName};
+ var rxName = this.ui.resourceName.val() || undefined;
+ var policyName = this.ui.policyName.val() || undefined;
+ var params = {group : groups, user : users, polResource : rxName, policyNamePartial : policyName};
+
+ _.each(this.policyCollList, function(obj,i){
+ var coll = this[obj.collName];
+ //clear previous query params
+ _.each(params, function(val, attr){
+ delete coll.queryParams[attr];
+ });
+ //Set default page state
+ coll.state = this.defaultPageState;
+ coll.queryParams = $.extend(coll.queryParams, params)
+ this.getResourceLists(obj.collName, obj.serviceDefName);
+ },this);
- this.getResourceLists(params);
},
autocompleteFilter : function(e){
var $el = $(e.currentTarget);
@@ -1213,32 +484,28 @@ define(function(require) {'use strict';
}
},
onShowMore : function(e){
- var id = $(e.currentTarget).attr('policy-group-id');
- var elem = $(e.currentTarget).closest('.showMoreLess').attr('data-id');
- $('[data-id="'+elem+'"]').find('[policy-group-id="'+id+'"]').show();
- $('[data-id="showLess"][policy-group-id="'+id+'"]').show();
- $('[data-id="showMore"][policy-group-id="'+id+'"]').hide();
+ var attrName = 'policy-groups-id';
+ var id = $(e.currentTarget).attr(attrName);
+ if(_.isUndefined(id)){
+ id = $(e.currentTarget).attr('policy-users-id');
+ attrName = 'policy-users-id';
+ }
+ var $td = $(e.currentTarget).parents('td');
+ $td.find('['+attrName+'="'+id+'"]').show();
+ $td.find('[data-id="showLess"]['+attrName+'="'+id+'"]').show();
+ $td.find('[data-id="showMore"]['+attrName+'="'+id+'"]').hide();
},
onShowLess : function(e){
- var id = $(e.currentTarget).attr('policy-group-id');
- var elem = $(e.currentTarget).closest('.showMoreLess').attr('data-id')
- $('[data-id="'+elem+'"]').find('[policy-group-id="'+id+'"]').slice(4).hide();
- $('[data-id="showLess"][policy-group-id="'+id+'"]').hide();
- $('[data-id="showMore"][policy-group-id="'+id+'"]').show();
- },
- onShowMoreUsers : function(e){
- var id = $(e.currentTarget).attr('policy-user-id');
- var elem = $(e.currentTarget).closest('.showMoreLess').attr('data-id');
- $('[data-id="'+elem+'"]').find('[policy-user-id="'+id+'"]').show();
- $('[data-id="showLessUsers"][policy-user-id="'+id+'"]').show();
- $('[data-id="showMoreUsers"][policy-user-id="'+id+'"]').hide();
- },
- onShowLessUsers : function(e){
- var id = $(e.currentTarget).attr('policy-user-id');
- var elem = $(e.currentTarget).closest('.showMoreLess').attr('data-id');
- $('[data-id="'+elem+'"]').find('[policy-user-id="'+id+'"]').slice(4).hide();
- $('[data-id="showLessUsers"][policy-user-id="'+id+'"]').hide();
- $('[data-id="showMoreUsers"][policy-user-id="'+id+'"]').show();
+ var attrName = 'policy-groups-id';
+ var id = $(e.currentTarget).attr(attrName);
+ if(_.isUndefined(id)){
+ id = $(e.currentTarget).attr('policy-users-id');
+ attrName = 'policy-users-id';
+ }
+ var $td = $(e.currentTarget).parents('td');
+ $td.find('['+attrName+'="'+id+'"]').slice(4).hide();
+ $td.find('[data-id="showLess"]['+attrName+'="'+id+'"]').hide();
+ $td.find('[data-id="showMore"]['+attrName+'="'+id+'"]').show();
},
/** on close */
onClose : function() {
@@ -1246,4 +513,4 @@ define(function(require) {'use strict';
});
return UserAccessLayout;
-});
+});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/webapp/templates/reports/UserAccessLayout_tmpl.html
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/templates/reports/UserAccessLayout_tmpl.html b/security-admin/src/main/webapp/templates/reports/UserAccessLayout_tmpl.html
index b931774..58798d1 100644
--- a/security-admin/src/main/webapp/templates/reports/UserAccessLayout_tmpl.html
+++ b/security-admin/src/main/webapp/templates/reports/UserAccessLayout_tmpl.html
@@ -82,12 +82,7 @@
</div>
</div>
- <!-- <div class="alert alert-success">
- <a href="#" class="close" data-dismiss="alert">×</a>
- <label data-js="searchResult"></label>
- </div> -->
-
- <div class="clearfix">
+<!-- <div class="clearfix">
<span class="pull-right">GOTO :
<a href="javascript:;" class="link-tag gotoLink" data-js="gotoHive" style="margin-right: 5px;">
<i class=" icon-chevron-down" ></i>
@@ -106,48 +101,18 @@
Storm Table
</a>
</span>
- </div>
+ </div> -->
<div class="row-fluid">
- <h3 class="wrap-header bold reportSearchHeader" data-js="hdfsHeader"> {{tt 'lbl.listOfHDFSPolicies'}}
- <span class="label label-yellow pull-right" data-js="hdfsSearchResult" ></span>
- </h3>
- <div class="wrap well position-relative">
- <div data-id="r_hdfsTable" class="hdfs-table showMoreLess"></div>
- <div data-id="r_hdfsTableSpinner" class="" ></div>
- </div>
+ {{#each policyHeaderList}}
+ <h3 class="wrap-header bold reportSearchHeader" data-js="hdfsHeader"> {{this.serviceDefName}}
+ <span class="label label-yellow pull-right" data-js="hdfsSearchResult" ></span>
+ </h3>
+ <div class="wrap well position-relative">
+ <div data-id="{{this.collName}}" class="hdfs-table showMoreLess"></div>
+ </div>
+ {{/each}}
- <h3 class="wrap-header bold reportSearchHeader" data-js="hiveHeader"> {{tt 'lbl.listOfHIVEPolicies'}}
- <span class="label label-yellow pull-right" data-js="hiveSearchResult" ></span>
- </h3>
- <div class="wrap well position-relative">
- <div data-id="r_hiveTable" class="showMoreLess"></div>
- <div data-id="r_hiveTableSpinner" class="" ></div>
- </div>
-
- <h3 class="wrap-header bold reportSearchHeader" data-js="hbaseHeader"> {{tt 'lbl.listOfHBASEPolicies'}}
- <span class="label label-yellow pull-right" data-js="hbaseSearchResult" ></span>
- </h3>
- <div class="wrap well position-relative">
- <div data-id="r_hbaseTable" class="showMoreLess"></div>
- <div data-id="r_hbaseTableSpinner" class="" ></div>
- </div>
-
- <h3 class="wrap-header bold reportSearchHeader" data-js="knoxHeader"> {{tt 'lbl.listOfKNOXPolicies'}}
- <span class="label label-yellow pull-right" data-js="knoxSearchResult" ></span>
- </h3>
- <div class="wrap well position-relative">
- <div data-id="r_knoxTable" class="showMoreLess"></div>
- <div data-id="r_knoxTableSpinner" class="" ></div>
- </div>
-
- <h3 class="wrap-header bold reportSearchHeader" data-js="stormHeader"> {{tt 'lbl.listOfSTORMPolicies'}}
- <span class="label label-yellow pull-right" data-js="stormSearchResult" ></span>
- </h3>
- <div class="wrap well position-relative">
- <div data-id="r_stormTable" class="showMoreLess"></div>
- <div data-id="r_stormTableSpinner" class="" ></div>
- </div>
</div>
</div>
[2/2] incubator-ranger git commit: RANGER-200: Pagination on
Analytics Page (Gautam Borad via Velmurugan Periasamy)
Posted by ve...@apache.org.
RANGER-200: Pagination on Analytics Page (Gautam Borad via Velmurugan Periasamy)
Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/85d5658f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/85d5658f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/85d5658f
Branch: refs/heads/master
Commit: 85d5658fc205a647bb397ee83d81df4cbaa5f53d
Parents: 4bf8a3f
Author: Velmurugan Periasamy <ve...@apache.org>
Authored: Fri Mar 20 04:18:15 2015 -0400
Committer: Velmurugan Periasamy <ve...@apache.org>
Committed: Fri Mar 20 04:18:15 2015 -0400
----------------------------------------------------------------------
.../apache/ranger/plugin/util/SearchFilter.java | 2 +
.../org/apache/ranger/biz/ServiceDBStore.java | 171 ++-
.../apache/ranger/common/RangerSearchUtil.java | 86 ++
.../org/apache/ranger/db/XXDataHistDao.java | 18 +
.../org/apache/ranger/rest/ServiceREST.java | 260 +++-
.../ranger/service/RangerDataHistService.java | 19 +-
.../ranger/service/RangerPolicyService.java | 4 +
.../ranger/service/RangerPolicyServiceBase.java | 19 +-
.../service/RangerServiceDefServiceBase.java | 20 +-
.../service/RangerServiceServiceBase.java | 18 +-
.../apache/ranger/view/RangerPolicyList.java | 55 +
.../ranger/view/RangerServiceDefList.java | 55 +
.../apache/ranger/view/RangerServiceList.java | 55 +
.../collection_bases/RangerPolicyListBase.js | 8 +-
.../RangerServiceDefListBase.js | 9 +-
.../collection_bases/RangerServiceListBase.js | 8 +-
.../webapp/scripts/controllers/Controller.js | 44 +-
.../scripts/views/common/XATableLayout.js | 12 +-
.../scripts/views/policies/PermissionList.js | 17 +-
.../scripts/views/policies/RangerPolicyForm.js | 10 +-
.../scripts/views/reports/UserAccessLayout.js | 1175 ++++--------------
.../reports/UserAccessLayout_tmpl.html | 55 +-
22 files changed, 971 insertions(+), 1149 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java
----------------------------------------------------------------------
diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java b/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java
index c669f23..86e5f7d 100644
--- a/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java
+++ b/agents-common/src/main/java/org/apache/ranger/plugin/util/SearchFilter.java
@@ -39,6 +39,8 @@ public class SearchFilter {
public static final String USER = "user"; // search
public static final String GROUP = "group"; // search
public static final String RESOURCE_PREFIX = "resource:"; // search
+ public static final String POL_RESOURCE = "polResource"; // search
+ public static final String POLICY_NAME_PARTIAL = "policyNamePartial"; // search, sort
public static final String CREATE_TIME = "createTime"; // sort
public static final String UPDATE_TIME = "updateTime"; // sort
public static final String START_INDEX = "startIndex";
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
index 2a30fd8..844a52e 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
@@ -32,6 +32,7 @@ import javax.annotation.PostConstruct;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.ranger.common.AppConstants;
import org.apache.ranger.common.ContextUtil;
import org.apache.ranger.common.DateUtil;
import org.apache.ranger.common.MessageEnums;
@@ -60,6 +61,7 @@ import org.apache.ranger.entity.XXAccessTypeDef;
import org.apache.ranger.entity.XXAccessTypeDefGrants;
import org.apache.ranger.entity.XXContextEnricherDef;
import org.apache.ranger.entity.XXDBBase;
+import org.apache.ranger.entity.XXDataHist;
import org.apache.ranger.entity.XXEnumDef;
import org.apache.ranger.entity.XXEnumElementDef;
import org.apache.ranger.entity.XXGroup;
@@ -102,6 +104,9 @@ import org.apache.ranger.service.RangerPolicyService;
import org.apache.ranger.service.RangerServiceDefService;
import org.apache.ranger.service.RangerServiceService;
import org.apache.ranger.service.XUserService;
+import org.apache.ranger.view.RangerPolicyList;
+import org.apache.ranger.view.RangerServiceDefList;
+import org.apache.ranger.view.RangerServiceList;
import org.apache.ranger.view.VXUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
@@ -226,6 +231,9 @@ public class ServiceDBStore implements ServiceStore {
serviceDef.setCreateTime(null);
serviceDef.setUpdateTime(null);
+ // While creating, value of version should be 1.
+ serviceDef.setVersion(new Long(1));
+
serviceDef = serviceDefService.create(serviceDef);
Long serviceDefId = serviceDef.getId();
XXServiceDef createdSvcDef = daoMgr.getXXServiceDef().getById(serviceDefId);
@@ -377,21 +385,34 @@ public class ServiceDBStore implements ServiceStore {
@Override
public List<RangerServiceDef> getServiceDefs(SearchFilter filter) throws Exception {
- if(LOG.isDebugEnabled()) {
+ if (LOG.isDebugEnabled()) {
LOG.debug("==> ServiceDBStore.getServiceDefs(" + filter + ")");
}
- List<RangerServiceDef> ret = null;
+ RangerServiceDefList svcDefList = serviceDefService.searchRangerServiceDefs(filter);
+ List<RangerServiceDef> ret = svcDefList.getServiceDefs();
- ret = serviceDefService.searchRangerServiceDefs(filter);
-
- if(LOG.isDebugEnabled()) {
+ if (LOG.isDebugEnabled()) {
LOG.debug("==> ServiceDBStore.getServiceDefs(" + filter + "): " + ret);
}
return ret;
}
+ public RangerServiceDefList getPaginatedServiceDefs(SearchFilter filter) throws Exception {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> ServiceDBStore.getPaginatedServiceDefs(" + filter + ")");
+ }
+
+ RangerServiceDefList svcDefList = serviceDefService.searchRangerServiceDefs(filter);
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> ServiceDBStore.getPaginatedServiceDefs(" + filter + ")");
+ }
+
+ return svcDefList;
+ }
+
@Override
public RangerService createService(RangerService service) throws Exception {
if (LOG.isDebugEnabled()) {
@@ -413,6 +434,9 @@ public class ServiceDBStore implements ServiceStore {
MessageEnums.ERROR_CREATING_OBJECT);
}
+ // While creating, value of version should be 1.
+ service.setVersion(new Long(1));
+
if(populateExistingBaseFields) {
svcService.setPopulateExistingBaseFields(true);
service = svcService.create(service);
@@ -506,7 +530,16 @@ public class ServiceDBStore implements ServiceStore {
}
List<XXTrxLog> trxLogList = svcService.getTransactionLog(service, existing, RangerServiceService.OPERATION_UPDATE_CONTEXT);
+
+ Long version = service.getVersion();
+ if(version == null) {
+ version = new Long(1);
+ LOG.info("Found Version Value: `null`, so setting value of version to 1, While updating object, version should not be null.");
+ } else {
+ version = new Long(version.longValue() + 1);
+ }
+ service.setVersion(version);
service = svcService.update(service);
XXService xUpdService = daoMgr.getXXService().getById(service.getId());
@@ -573,7 +606,17 @@ public class ServiceDBStore implements ServiceStore {
configDao.remove(configMap);
}
+ Long version = service.getVersion();
+ if(version == null) {
+ version = new Long(1);
+ LOG.info("Found Version Value: `null`, so setting value of version to 1, While updating object, version should not be null.");
+ } else {
+ version = new Long(version.longValue() + 1);
+ }
+ service.setVersion(version);
+
svcService.delete(service);
+
dataHistService.createObjectDataHistory(service, RangerDataHistService.ACTION_DELETE);
List<XXTrxLog> trxLogList = svcService.getTransactionLog(service, RangerServiceService.OPERATION_DELETE_CONTEXT);
@@ -602,11 +645,24 @@ public class ServiceDBStore implements ServiceStore {
if(LOG.isDebugEnabled()) {
LOG.debug("==> ServiceDBStore.getServices()");
}
- List<RangerService> ret = svcService.searchRangerPolicies(filter);
+ RangerServiceList serviceList = svcService.searchRangerServices(filter);
+ List<RangerService> ret = serviceList.getServices();
return ret;
}
+ public RangerServiceList getPaginatedServices(SearchFilter filter) throws Exception {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> ServiceDBStore.getPaginatedServices()");
+ }
+ RangerServiceList serviceList = svcService.searchRangerServices(filter);
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== ServiceDBStore.getPaginatedServices()");
+ }
+ return serviceList;
+ }
+
@Override
public RangerPolicy createPolicy(RangerPolicy policy) throws Exception {
@@ -631,6 +687,8 @@ public class ServiceDBStore implements ServiceStore {
Map<String, RangerPolicyResource> resources = policy.getResources();
List<RangerPolicyItem> policyItems = policy.getPolicyItems();
+ policy.setVersion(new Long(1));
+
if(populateExistingBaseFields) {
policyService.setPopulateExistingBaseFields(true);
policy = policyService.create(policy);
@@ -696,6 +754,16 @@ public class ServiceDBStore implements ServiceStore {
List<XXTrxLog> trxLogList = policyService.getTransactionLog(policy, xxExisting, RangerPolicyService.OPERATION_UPDATE_CONTEXT);
+ Long version = policy.getVersion();
+ if(version == null) {
+ version = new Long(1);
+ LOG.info("Found Version Value: `null`, so setting value of version to 1, While updating object, version should not be null.");
+ } else {
+ version = new Long(version.longValue() + 1);
+ }
+
+ policy.setVersion(version);
+
policy = policyService.update(policy);
XXPolicy newUpdPolicy = daoMgr.getXXPolicy().getById(policy.getId());
@@ -733,6 +801,16 @@ public class ServiceDBStore implements ServiceStore {
throw new Exception("service does not exist - name='" + policy.getService());
}
+ Long version = policy.getVersion();
+ if(version == null) {
+ version = new Long(1);
+ LOG.info("Found Version Value: `null`, so setting value of version to 1, While updating object, version should not be null.");
+ } else {
+ version = new Long(version.longValue() + 1);
+ }
+
+ policy.setVersion(version);
+
List<XXTrxLog> trxLogList = policyService.getTransactionLog(policy, RangerPolicyService.OPERATION_DELETE_CONTEXT);
deleteExistingPolicyItems(policy);
@@ -759,11 +837,30 @@ public class ServiceDBStore implements ServiceStore {
LOG.debug("==> ServiceDBStore.getPolicies()");
}
- List<RangerPolicy> ret = policyService.searchRangerPolicies(filter);
+ RangerPolicyList policyList = policyService.searchRangerPolicies(filter);
+ List<RangerPolicy> ret = policyList.getPolicies();
+ if(LOG.isDebugEnabled()) {
+ LOG.debug("<== ServiceDBStore.getPolicies()");
+ }
+
return ret;
}
+ public RangerPolicyList getPaginatedPolicies(SearchFilter filter) throws Exception {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> ServiceDBStore.getPaginatedPolicies()");
+ }
+
+ RangerPolicyList policyList = policyService.searchRangerPolicies(filter);
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== ServiceDBStore.getPaginatedPolicies()");
+ }
+
+ return policyList;
+ }
+
@Override
public List<RangerPolicy> getServicePolicies(Long serviceId, SearchFilter filter) throws Exception {
if(LOG.isDebugEnabled()) {
@@ -781,6 +878,25 @@ public class ServiceDBStore implements ServiceStore {
return ret;
}
+ public RangerPolicyList getPaginatedServicePolicies(Long serviceId, SearchFilter filter) throws Exception {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> ServiceDBStore.getPaginatedServicePolicies(" + serviceId + ")");
+ }
+
+ RangerService service = getService(serviceId);
+
+ if (service == null) {
+ throw new Exception("service does not exist - id='" + serviceId);
+ }
+
+ RangerPolicyList ret = getPaginatedServicePolicies(service.getName(), filter);
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== ServiceDBStore.getPaginatedServicePolicies(" + serviceId + ")");
+ }
+ return ret;
+ }
+
@Override
public List<RangerPolicy> getServicePolicies(String serviceName, SearchFilter filter) throws Exception {
if(LOG.isDebugEnabled()) {
@@ -808,6 +924,33 @@ public class ServiceDBStore implements ServiceStore {
return ret;
}
+ public RangerPolicyList getPaginatedServicePolicies(String serviceName, SearchFilter filter) throws Exception {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> ServiceDBStore.getPaginatedServicePolicies(" + serviceName + ")");
+ }
+
+ RangerPolicyList ret = null;
+
+ try {
+ if (filter == null) {
+ filter = new SearchFilter();
+ }
+
+ filter.setParam(SearchFilter.SERVICE_NAME, serviceName);
+
+ ret = getPaginatedPolicies(filter);
+ } catch (Exception excp) {
+ LOG.error("ServiceDBStore.getPaginatedServicePolicies(" + serviceName + "): failed to read policies", excp);
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== ServiceDBStore.getPaginatedServicePolicies(" + serviceName + "): count="
+ + ((ret == null) ? 0 : ret.getListSize()));
+ }
+
+ return ret;
+ }
+
@Override
public ServicePolicies getServicePoliciesIfUpdated(String serviceName, Long lastKnownVersion) throws Exception {
if(LOG.isDebugEnabled()) {
@@ -870,7 +1013,7 @@ public class ServiceDBStore implements ServiceStore {
String value;
if("path".equalsIgnoreCase(resDef.getName())) {
- value = "/*/*";
+ value = "/*";
} else {
value = "*";
}
@@ -1151,4 +1294,14 @@ public class ServiceDBStore implements ServiceStore {
this.populateExistingBaseFields = populateExistingBaseFields;
}
-}
\ No newline at end of file
+ public RangerPolicy getPolicyFromEventTime(Date eventTime, Long policyId) {
+
+ XXDataHist xDataHist = daoMgr.getXXDataHist().findObjByEventTimeClassTypeAndId(eventTime,
+ AppConstants.CLASS_TYPE_RANGER_POLICY, policyId);
+ String content = xDataHist.getContent();
+ RangerPolicy policy = (RangerPolicy) dataHistService.writeJsonToJavaObject(content, RangerPolicy.class);
+
+ return policy;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java b/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
index 192734e..205f4f5 100644
--- a/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
+++ b/security-admin/src/main/java/org/apache/ranger/common/RangerSearchUtil.java
@@ -21,11 +21,17 @@
import java.util.ArrayList;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.Query;
+import javax.servlet.http.HttpServletRequest;
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.ranger.plugin.util.SearchFilter;
import org.springframework.stereotype.Component;
@@ -33,6 +39,86 @@ import org.springframework.stereotype.Component;
@Component
public class RangerSearchUtil extends SearchUtil {
final static Logger logger = Logger.getLogger(RangerSearchUtil.class);
+
+ public SearchFilter getSearchFilter(HttpServletRequest request, List<SortField> sortFields) {
+ if (request == null) {
+ return null;
+ }
+
+ SearchFilter ret = new SearchFilter();
+
+ if (MapUtils.isEmpty(request.getParameterMap())) {
+ ret.setParams(new HashMap<String, String>());
+ }
+
+ ret.setParam(SearchFilter.LOGIN_USER, request.getParameter(SearchFilter.LOGIN_USER));
+ ret.setParam(SearchFilter.SERVICE_TYPE, request.getParameter(SearchFilter.SERVICE_TYPE));
+ ret.setParam(SearchFilter.SERVICE_TYPE_ID, request.getParameter(SearchFilter.SERVICE_TYPE_ID));
+ ret.setParam(SearchFilter.SERVICE_NAME, request.getParameter(SearchFilter.SERVICE_NAME));
+ ret.setParam(SearchFilter.SERVICE_ID, request.getParameter(SearchFilter.SERVICE_ID));
+ ret.setParam(SearchFilter.POLICY_NAME, request.getParameter(SearchFilter.POLICY_NAME));
+ ret.setParam(SearchFilter.POLICY_NAME_PARTIAL, request.getParameter(SearchFilter.POLICY_NAME_PARTIAL));
+ ret.setParam(SearchFilter.POLICY_ID, request.getParameter(SearchFilter.POLICY_ID));
+ ret.setParam(SearchFilter.STATUS, request.getParameter(SearchFilter.STATUS));
+ ret.setParam(SearchFilter.USER, request.getParameter(SearchFilter.USER));
+ ret.setParam(SearchFilter.GROUP, request.getParameter(SearchFilter.GROUP));
+ ret.setParam(SearchFilter.POL_RESOURCE, request.getParameter(SearchFilter.POL_RESOURCE));
+
+ for (Map.Entry<String, String[]> e : request.getParameterMap().entrySet()) {
+ String name = e.getKey();
+ String[] values = e.getValue();
+
+ if (!StringUtils.isEmpty(name) && !ArrayUtils.isEmpty(values)
+ && name.startsWith(SearchFilter.RESOURCE_PREFIX)) {
+ ret.setParam(name, values[0]);
+ }
+ }
+
+ extractCommonCriteriasForFilter(request, ret, sortFields);
+
+ return ret;
+ }
+
+ public SearchFilter extractCommonCriteriasForFilter(HttpServletRequest request, SearchFilter ret, List<SortField> sortFields) {
+ int startIndex = restErrorUtil.parseInt(request.getParameter(SearchFilter.START_INDEX), 0,
+ "Invalid value for parameter startIndex", MessageEnums.INVALID_INPUT_DATA, null,
+ SearchFilter.START_INDEX);
+ ret.setStartIndex(startIndex);
+
+ int pageSize = restErrorUtil.parseInt(request.getParameter(SearchFilter.PAGE_SIZE),
+ configUtil.getDefaultMaxRows(), "Invalid value for parameter pageSize",
+ MessageEnums.INVALID_INPUT_DATA, null, SearchFilter.PAGE_SIZE);
+ ret.setMaxRows(pageSize);
+
+ ret.setGetCount(restErrorUtil.parseBoolean(request.getParameter("getCount"), true));
+ String sortBy = restErrorUtil.validateString(request.getParameter(SearchFilter.SORT_BY),
+ StringUtil.VALIDATION_ALPHA, "Invalid value for parameter sortBy", MessageEnums.INVALID_INPUT_DATA,
+ null, SearchFilter.SORT_BY);
+
+ boolean sortSet = false;
+ if (!StringUtils.isEmpty(sortBy)) {
+ for (SortField sortField : sortFields) {
+ if (sortField.getParamName().equalsIgnoreCase(sortBy)) {
+ ret.setSortBy(sortField.getParamName());
+ String sortType = restErrorUtil.validateString(request.getParameter("sortType"),
+ StringUtil.VALIDATION_ALPHA, "Invalid value for parameter sortType",
+ MessageEnums.INVALID_INPUT_DATA, null, "sortType");
+ ret.setSortType(sortType);
+ sortSet = true;
+ break;
+ }
+ }
+ }
+
+ if (!sortSet && !StringUtils.isEmpty(sortBy)) {
+ logger.info("Invalid or unsupported sortBy field passed. sortBy=" + sortBy, new Throwable());
+ }
+
+ if(ret.getParams() == null) {
+ ret.setParams(new HashMap<String, String>());
+ }
+ return ret;
+ }
public Query createSearchQuery(EntityManager em, String queryStr, String sortClause,
SearchFilter searchCriteria, List<SearchField> searchFields,
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/java/org/apache/ranger/db/XXDataHistDao.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXDataHistDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXDataHistDao.java
index 29c4246..4479145 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXDataHistDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXDataHistDao.java
@@ -1,6 +1,9 @@
package org.apache.ranger.db;
+import java.util.Date;
+
import javax.persistence.NoResultException;
+import javax.persistence.Query;
import org.apache.ranger.common.db.BaseDao;
import org.apache.ranger.entity.XXDataHist;
@@ -25,5 +28,20 @@ public class XXDataHistDao extends BaseDao<XXDataHist> {
return null;
}
}
+
+ public XXDataHist findObjByEventTimeClassTypeAndId(Date eventTime, int classType, Long objId) {
+ if (eventTime == null || objId == null) {
+ return null;
+ }
+ try {
+ String queryStr = "select obj.* from x_data_hist obj where obj.obj_class_type = "+classType
+ + " and obj.obj_id = "+objId + " and obj.create_time <= '" + eventTime + "' ORDER BY obj.id DESC";
+ Query jpaQuery = getEntityManager().createNativeQuery(queryStr, tClass).setMaxResults(1);
+
+ return (XXDataHist) jpaQuery.getSingleResult();
+ } catch (NoResultException e) {
+ return null;
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
index ec64e89..1cfaa91 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
@@ -21,6 +21,7 @@ package org.apache.ranger.rest;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -40,8 +41,6 @@ import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.collections.MapUtils;
-import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -49,7 +48,10 @@ import org.apache.ranger.admin.client.datatype.RESTResponse;
import org.apache.ranger.biz.AssetMgr;
import org.apache.ranger.biz.ServiceDBStore;
import org.apache.ranger.biz.ServiceMgr;
+import org.apache.ranger.common.MessageEnums;
import org.apache.ranger.common.RESTErrorUtil;
+import org.apache.ranger.common.RangerConfigUtil;
+import org.apache.ranger.common.RangerSearchUtil;
import org.apache.ranger.common.ServiceUtil;
import org.apache.ranger.entity.XXPolicyExportAudit;
import org.apache.ranger.plugin.model.RangerPolicy;
@@ -72,6 +74,12 @@ import org.apache.ranger.plugin.service.ResourceLookupContext;
import org.apache.ranger.plugin.util.GrantRevokeRequest;
import org.apache.ranger.plugin.util.SearchFilter;
import org.apache.ranger.plugin.util.ServicePolicies;
+import org.apache.ranger.service.RangerPolicyService;
+import org.apache.ranger.service.RangerServiceDefService;
+import org.apache.ranger.service.RangerServiceService;
+import org.apache.ranger.view.RangerPolicyList;
+import org.apache.ranger.view.RangerServiceDefList;
+import org.apache.ranger.view.RangerServiceList;
import org.apache.ranger.view.VXResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
@@ -103,6 +111,21 @@ public class ServiceREST {
@Autowired
ServiceUtil serviceUtil;
+ @Autowired
+ RangerConfigUtil configUtil;
+
+ @Autowired
+ RangerPolicyService policyService;
+
+ @Autowired
+ RangerServiceService svcService;
+
+ @Autowired
+ RangerServiceDefService serviceDefService;
+
+ @Autowired
+ RangerSearchUtil searchUtil;
+
// this indirection for validation via a factory exists only for testability
// TODO move the instantiation to DI framework?
RangerValidatorFactory validatorFactory = new RangerValidatorFactory();
@@ -250,7 +273,7 @@ public class ServiceREST {
}
@GET
- @Path("/definitions")
+ @Path("/definitions/unpaginated")
@Produces({ "application/json", "application/xml" })
public List<RangerServiceDef> getServiceDefs(@Context HttpServletRequest request) {
if(LOG.isDebugEnabled()) {
@@ -259,7 +282,7 @@ public class ServiceREST {
List<RangerServiceDef> ret = null;
- SearchFilter filter = getSearchFilter(request);
+ SearchFilter filter = searchUtil.getSearchFilter(request, serviceDefService.sortFields);
try {
ret = svcStore.getServiceDefs(filter);
@@ -417,7 +440,7 @@ public class ServiceREST {
}
@GET
- @Path("/services")
+ @Path("/services/unpaginated")
@Produces({ "application/json", "application/xml" })
public List<RangerService> getServices(@Context HttpServletRequest request) {
if(LOG.isDebugEnabled()) {
@@ -426,7 +449,7 @@ public class ServiceREST {
List<RangerService> ret = null;
- SearchFilter filter = getSearchFilter(request);
+ SearchFilter filter = searchUtil.getSearchFilter(request, svcService.sortFields);
try {
ret = svcStore.getServices(filter);
@@ -899,7 +922,7 @@ public class ServiceREST {
}
@GET
- @Path("/policies")
+ @Path("/policies/unpaginated")
@Produces({ "application/json", "application/xml" })
public List<RangerPolicy> getPolicies(@Context HttpServletRequest request) {
if(LOG.isDebugEnabled()) {
@@ -908,7 +931,8 @@ public class ServiceREST {
List<RangerPolicy> ret = null;
- SearchFilter filter = getSearchFilter(request);
+ SearchFilter filter = searchUtil.getSearchFilter(request, policyService.sortFields);
+
try {
ret = svcStore.getPolicies(filter);
@@ -953,7 +977,7 @@ public class ServiceREST {
}
@GET
- @Path("/policies/service/{id}")
+ @Path("/policies/service/unpaginated/{id}")
@Produces({ "application/json", "application/xml" })
public List<RangerPolicy> getServicePolicies(@PathParam("id") Long serviceId, @Context HttpServletRequest request) {
if(LOG.isDebugEnabled()) {
@@ -962,7 +986,7 @@ public class ServiceREST {
List<RangerPolicy> ret = null;
- SearchFilter filter = getSearchFilter(request);
+ SearchFilter filter = searchUtil.getSearchFilter(request, policyService.sortFields);
try {
ret = svcStore.getServicePolicies(serviceId, filter);
@@ -984,7 +1008,7 @@ public class ServiceREST {
}
@GET
- @Path("/policies/service/name/{name}")
+ @Path("/policies/service/unpaginated/name/{name}")
@Produces({ "application/json", "application/xml" })
public List<RangerPolicy> getServicePolicies(@PathParam("name") String serviceName, @Context HttpServletRequest request) {
if(LOG.isDebugEnabled()) {
@@ -993,7 +1017,7 @@ public class ServiceREST {
List<RangerPolicy> ret = null;
- SearchFilter filter = getSearchFilter(request);
+ SearchFilter filter = searchUtil.getSearchFilter(request, policyService.sortFields);
try {
ret = svcStore.getServicePolicies(serviceName, filter);
@@ -1060,44 +1084,6 @@ public class ServiceREST {
return ret;
}
-
- private SearchFilter getSearchFilter(HttpServletRequest request) {
- if(request == null) {
- return null;
- }
-
- SearchFilter ret = new SearchFilter();
-
- if(MapUtils.isEmpty(request.getParameterMap())) {
- ret.setParams(new HashMap<String, String>());
- }
-
- ret.setParam(SearchFilter.LOGIN_USER, request.getParameter(SearchFilter.LOGIN_USER));
- ret.setParam(SearchFilter.SERVICE_TYPE, request.getParameter(SearchFilter.SERVICE_TYPE));
- ret.setParam(SearchFilter.SERVICE_TYPE_ID, request.getParameter(SearchFilter.SERVICE_TYPE_ID));
- ret.setParam(SearchFilter.SERVICE_NAME, request.getParameter(SearchFilter.SERVICE_NAME));
- ret.setParam(SearchFilter.SERVICE_ID, request.getParameter(SearchFilter.SERVICE_ID));
- ret.setParam(SearchFilter.POLICY_NAME, request.getParameter(SearchFilter.POLICY_NAME));
- ret.setParam(SearchFilter.POLICY_ID, request.getParameter(SearchFilter.POLICY_ID));
- ret.setParam(SearchFilter.STATUS, request.getParameter(SearchFilter.STATUS));
- ret.setParam(SearchFilter.USER, request.getParameter(SearchFilter.USER));
- ret.setParam(SearchFilter.GROUP, request.getParameter(SearchFilter.GROUP));
- ret.setParam(SearchFilter.SORT_BY, request.getParameter(SearchFilter.SORT_BY));
- ret.setParam(SearchFilter.START_INDEX, request.getParameter(SearchFilter.START_INDEX));
- ret.setParam(SearchFilter.PAGE_SIZE, request.getParameter(SearchFilter.PAGE_SIZE));
-
- for(Map.Entry<String, String[]> e : request.getParameterMap().entrySet()) {
- String name = e.getKey();
- String[] values = e.getValue();
-
- if(!StringUtils.isEmpty(name) && !ArrayUtils.isEmpty(values) && name.startsWith(SearchFilter.RESOURCE_PREFIX)) {
- ret.setParam(name, values[0]);
- }
- }
-
- return ret;
- }
-
private void createPolicyDownloadAudit(String serviceName, Long lastKnownVersion, String pluginId, ServicePolicies policies, int httpRespCode, HttpServletRequest request) {
try {
String ipAddress = request.getHeader("X-FORWARDED-FOR");
@@ -1347,4 +1333,178 @@ public class ServiceREST {
return ret;
}
+
+ @GET
+ @Path("/definitions")
+ @Produces({ "application/json", "application/xml" })
+ public RangerServiceDefList getPaginatedServiceDefs(@Context HttpServletRequest request) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> ServiceREST.getPaginatedServiceDefs()");
+ }
+
+ RangerServiceDefList ret = null;
+
+ SearchFilter filter = searchUtil.getSearchFilter(request, serviceDefService.sortFields);
+
+ try {
+ ret = svcStore.getPaginatedServiceDefs(filter);
+ } catch (Exception excp) {
+ LOG.error("getServiceDefs() failed", excp);
+
+ throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true);
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== ServiceREST.getPaginatedServiceDefs(): count=" + (ret == null ? 0 : ret.getListSize()));
+ }
+ return ret;
+ }
+
+ @GET
+ @Path("/services")
+ @Produces({ "application/json", "application/xml" })
+ public RangerServiceList getPaginatedServices(@Context HttpServletRequest request) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> ServiceREST.getPaginatedServices()");
+ }
+
+ RangerServiceList ret = null;
+
+ SearchFilter filter = searchUtil.getSearchFilter(request, svcService.sortFields);
+
+ try {
+ ret = svcStore.getPaginatedServices(filter);
+ } catch (Exception excp) {
+ LOG.error("getServices() failed", excp);
+
+ throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true);
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== ServiceREST.getPaginatedServices(): count=" + (ret == null ? 0 : ret.getListSize()));
+ }
+ return ret;
+ }
+
+ @GET
+ @Path("/policies")
+ @Produces({ "application/json", "application/xml" })
+ public RangerPolicyList getPaginatedPolicies(@Context HttpServletRequest request) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> ServiceREST.getPaginatedPolicies()");
+ }
+
+ RangerPolicyList ret = null;
+
+ SearchFilter filter = searchUtil.getSearchFilter(request, policyService.sortFields);
+
+ try {
+ ret = svcStore.getPaginatedPolicies(filter);
+ } catch (Exception excp) {
+ LOG.error("getPolicies() failed", excp);
+
+ throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true);
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== ServiceREST.getPaginatedPolicies(): count=" + (ret == null ? 0 : ret.getListSize()));
+ }
+ return ret;
+ }
+
+ @GET
+ @Path("/policies/service/{id}")
+ @Produces({ "application/json", "application/xml" })
+ public RangerPolicyList getPaginatedServicePolicies(@PathParam("id") Long serviceId,
+ @Context HttpServletRequest request) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> ServiceREST.getServicePolicies(" + serviceId + ")");
+ }
+
+ RangerPolicyList ret = null;
+
+ SearchFilter filter = searchUtil.getSearchFilter(request, policyService.sortFields);
+
+ try {
+ ret = svcStore.getPaginatedServicePolicies(serviceId, filter);
+ } catch (Exception excp) {
+ LOG.error("getServicePolicies(" + serviceId + ") failed", excp);
+
+ throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true);
+ }
+
+ if (ret == null) {
+ throw restErrorUtil.createRESTException(HttpServletResponse.SC_NOT_FOUND, "Not found", true);
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== ServiceREST.getServicePolicies(" + serviceId + "): count="
+ + (ret == null ? 0 : ret.getListSize()));
+ }
+ return ret;
+ }
+
+ @GET
+ @Path("/policies/service/name/{name}")
+ @Produces({ "application/json", "application/xml" })
+ public RangerPolicyList getPaginatedServicePolicies(@PathParam("name") String serviceName,
+ @Context HttpServletRequest request) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> ServiceREST.getServicePolicies(" + serviceName + ")");
+ }
+
+ RangerPolicyList ret = null;
+
+ SearchFilter filter = searchUtil.getSearchFilter(request, policyService.sortFields);
+
+ try {
+ ret = svcStore.getPaginatedServicePolicies(serviceName, filter);
+ } catch (Exception excp) {
+ LOG.error("getServicePolicies(" + serviceName + ") failed", excp);
+
+ throw restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, excp.getMessage(), true);
+ }
+
+ if (ret == null) {
+ throw restErrorUtil.createRESTException(HttpServletResponse.SC_NOT_FOUND, "Not found", true);
+ }
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== ServiceREST.getServicePolicies(" + serviceName + "): count="
+ + (ret == null ? 0 : ret.getListSize()));
+ }
+
+ return ret;
+ }
+
+ @GET
+ @Path("/policies/eventTime")
+ @Produces({ "application/json", "application/xml" })
+ public RangerPolicy getPolicyFromEventTime(@Context HttpServletRequest request) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("==> ServiceREST.getPolicyFromEventTime()");
+ }
+
+ String eventTimeStr = request.getParameter("eventTime");
+ String policyIdStr = request.getParameter("policyId");
+
+ if (StringUtils.isEmpty(eventTimeStr) || StringUtils.isEmpty(policyIdStr)) {
+ throw restErrorUtil.createRESTException("EventTime or policyId cannot be null or empty string.",
+ MessageEnums.INVALID_INPUT_DATA);
+ }
+
+ Long policyId = Long.parseLong(policyIdStr);
+
+ Date eventTime = restErrorUtil.parseDate(eventTimeStr, "Invalid value for" + "Event Time",
+ MessageEnums.INVALID_INPUT_DATA, null, "eventTime", "MM/dd/yyyy");
+
+ RangerPolicy policy = svcStore.getPolicyFromEventTime(eventTime, policyId);
+
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("<== ServiceREST.getPolicyFromEventTime()");
+ }
+
+ return policy;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java
index a5aa16e..b75b514 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerDataHistService.java
@@ -122,5 +122,22 @@ public class RangerDataHistService {
MessageEnums.INVALID_INPUT_DATA);
}
}
-
+
+ public Object writeJsonToJavaObject(String json, Class<?> tClass) {
+ ObjectMapper mapper = new ObjectMapper();
+
+ try {
+ return mapper.readValue(json, tClass);
+ } catch (JsonParseException e) {
+ throw restErrorUtil.createRESTException("Invalid input data: " + e.getMessage(),
+ MessageEnums.INVALID_INPUT_DATA);
+ } catch (JsonMappingException e) {
+ throw restErrorUtil.createRESTException("Invalid input data: " + e.getMessage(),
+ MessageEnums.INVALID_INPUT_DATA);
+ } catch (IOException e) {
+ throw restErrorUtil.createRESTException("Invalid input data: " + e.getMessage(),
+ MessageEnums.INVALID_INPUT_DATA);
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
index ace800d..1db4779 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyService.java
@@ -88,6 +88,10 @@ public class RangerPolicyService extends RangerPolicyServiceBase<XXPolicy, Range
searchFields.add(new SearchField(SearchFilter.GROUP, "xGrp.name", DATA_TYPE.STRING, SEARCH_TYPE.FULL,
"XXGroup xGrp, XXPolicyItem xPolItem, XXPolicyItemGroupPerm grpPerm", "obj.id = xPolItem.policyId "
+ "and grpPerm.policyItemId = xPolItem.id and xGrp.id = grpPerm.groupId"));
+ searchFields.add(new SearchField(SearchFilter.POL_RESOURCE, "resMap.value", DATA_TYPE.STRING,
+ SEARCH_TYPE.PARTIAL, "XXPolicyResourceMap resMap, XXPolicyResource polRes",
+ "resMap.resourceId = polRes.id and polRes.policyId = obj.id"));
+ searchFields.add(new SearchField(SearchFilter.POLICY_NAME_PARTIAL, "obj.name", DATA_TYPE.STRING, SEARCH_TYPE.PARTIAL));
sortFields.add(new SortField(SearchFilter.CREATE_TIME, "obj.createTime"));
sortFields.add(new SortField(SearchFilter.UPDATE_TIME, "obj.updateTime"));
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
index d19e580..58c2b69 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerPolicyServiceBase.java
@@ -8,10 +8,9 @@ import org.apache.ranger.common.GUIDUtil;
import org.apache.ranger.common.MessageEnums;
import org.apache.ranger.entity.XXPolicy;
import org.apache.ranger.entity.XXService;
-import org.apache.ranger.entity.XXServiceDef;
import org.apache.ranger.plugin.model.RangerPolicy;
-import org.apache.ranger.plugin.model.RangerServiceDef;
import org.apache.ranger.plugin.util.SearchFilter;
+import org.apache.ranger.view.RangerPolicyList;
public abstract class RangerPolicyServiceBase<T extends XXPolicy, V extends RangerPolicy> extends RangerBaseModelService<T, V> {
@@ -52,17 +51,19 @@ public abstract class RangerPolicyServiceBase<T extends XXPolicy, V extends Rang
vObj.setIsAuditEnabled(xObj.getIsAuditEnabled());
return vObj;
}
-
+
@SuppressWarnings("unchecked")
- public List<RangerPolicy> searchRangerPolicies(SearchFilter searchFilter) {
+ public RangerPolicyList searchRangerPolicies(SearchFilter searchFilter) {
List<RangerPolicy> policyList = new ArrayList<RangerPolicy>();
+ RangerPolicyList retList = new RangerPolicyList();
- List<XXPolicy> xPolList = (List<XXPolicy>) searchResources(searchFilter, searchFields, sortFields, null);
- for(XXPolicy xPol : xPolList) {
+ List<XXPolicy> xPolList = (List<XXPolicy>) searchResources(searchFilter, searchFields, sortFields, retList);
+ for (XXPolicy xPol : xPolList) {
policyList.add(populateViewBean((T) xPol));
}
-
- return policyList;
+ retList.setPolicies(policyList);
+
+ return retList;
}
-
+
}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java
index 374217f..afaf2cb 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceDefServiceBase.java
@@ -27,6 +27,7 @@ import org.apache.ranger.plugin.model.RangerServiceDef.RangerPolicyConditionDef;
import org.apache.ranger.plugin.model.RangerServiceDef.RangerResourceDef;
import org.apache.ranger.plugin.model.RangerServiceDef.RangerServiceConfigDef;
import org.apache.ranger.plugin.util.SearchFilter;
+import org.apache.ranger.view.RangerServiceDefList;
import org.springframework.beans.factory.annotation.Autowired;
public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V extends RangerServiceDef>
@@ -302,17 +303,20 @@ public abstract class RangerServiceDefServiceBase<T extends XXServiceDef, V exte
vObj.setRbKeyLabel(xObj.getRbkeylabel());
return vObj;
}
-
+
@SuppressWarnings("unchecked")
- public List<RangerServiceDef> searchRangerServiceDefs(SearchFilter searchFilter) {
+ public RangerServiceDefList searchRangerServiceDefs(SearchFilter searchFilter) {
List<RangerServiceDef> serviceDefList = new ArrayList<RangerServiceDef>();
-
- List<XXServiceDef> xSvcDefList = (List<XXServiceDef>) searchResources(searchFilter, searchFields, sortFields, null);
- for(XXServiceDef xSvcDef : xSvcDefList) {
+ RangerServiceDefList retList = new RangerServiceDefList();
+
+ List<XXServiceDef> xSvcDefList = (List<XXServiceDef>) searchResources(searchFilter, searchFields, sortFields, retList);
+ for (XXServiceDef xSvcDef : xSvcDefList) {
serviceDefList.add(populateViewBean((T) xSvcDef));
}
-
- return serviceDefList;
+
+ retList.setServiceDefs(serviceDefList);
+
+ return retList;
}
-
+
}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/java/org/apache/ranger/service/RangerServiceServiceBase.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceServiceBase.java b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceServiceBase.java
index 6f484ec..fb6142e 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerServiceServiceBase.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerServiceServiceBase.java
@@ -10,6 +10,7 @@ import org.apache.ranger.entity.XXService;
import org.apache.ranger.entity.XXServiceDef;
import org.apache.ranger.plugin.model.RangerService;
import org.apache.ranger.plugin.util.SearchFilter;
+import org.apache.ranger.view.RangerServiceList;
public abstract class RangerServiceServiceBase<T extends XXService, V extends RangerService> extends RangerBaseModelService<T, V> {
@@ -49,17 +50,18 @@ public abstract class RangerServiceServiceBase<T extends XXService, V extends Ra
vObj.setPolicyUpdateTime(xObj.getPolicyUpdateTime());
return vObj;
}
-
+
@SuppressWarnings("unchecked")
- public List<RangerService> searchRangerPolicies(SearchFilter searchFilter) {
+ public RangerServiceList searchRangerServices(SearchFilter searchFilter) {
List<RangerService> serviceList = new ArrayList<RangerService>();
-
- List<XXService> xSvcList = (List<XXService>) searchResources(searchFilter, searchFields, sortFields, null);
- for(XXService xSvc : xSvcList) {
+ RangerServiceList retList = new RangerServiceList();
+
+ List<XXService> xSvcList = (List<XXService>) searchResources(searchFilter, searchFields, sortFields, retList);
+ for (XXService xSvc : xSvcList) {
serviceList.add(populateViewBean((T) xSvc));
}
-
- return serviceList;
+ retList.setServices(serviceList);
+ return retList;
}
-
+
}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/java/org/apache/ranger/view/RangerPolicyList.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/view/RangerPolicyList.java b/security-admin/src/main/java/org/apache/ranger/view/RangerPolicyList.java
new file mode 100644
index 0000000..d4f8b2f
--- /dev/null
+++ b/security-admin/src/main/java/org/apache/ranger/view/RangerPolicyList.java
@@ -0,0 +1,55 @@
+package org.apache.ranger.view;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.apache.ranger.common.view.VList;
+import org.apache.ranger.plugin.model.RangerPolicy;
+import org.codehaus.jackson.annotate.JsonAutoDetect;
+import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+
+@JsonAutoDetect(getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, fieldVisibility = Visibility.ANY)
+@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class RangerPolicyList extends VList {
+ private static final long serialVersionUID = 1L;
+
+ List<RangerPolicy> policies = new ArrayList<RangerPolicy>();
+
+ public RangerPolicyList() {
+ super();
+ }
+
+ public RangerPolicyList(List<RangerPolicy> objList) {
+ super(objList);
+ this.policies = objList;
+ }
+
+ public List<RangerPolicy> getPolicies() {
+ return policies;
+ }
+
+ public void setPolicies(List<RangerPolicy> policies) {
+ this.policies = policies;
+ }
+
+ @Override
+ public int getListSize() {
+ if (policies != null) {
+ return policies.size();
+ }
+ return 0;
+ }
+
+ @Override
+ public List<?> getList() {
+ return policies;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/java/org/apache/ranger/view/RangerServiceDefList.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/view/RangerServiceDefList.java b/security-admin/src/main/java/org/apache/ranger/view/RangerServiceDefList.java
new file mode 100644
index 0000000..eba8e9c
--- /dev/null
+++ b/security-admin/src/main/java/org/apache/ranger/view/RangerServiceDefList.java
@@ -0,0 +1,55 @@
+package org.apache.ranger.view;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.apache.ranger.common.view.VList;
+import org.apache.ranger.plugin.model.RangerServiceDef;
+import org.codehaus.jackson.annotate.JsonAutoDetect;
+import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+
+@JsonAutoDetect(getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, fieldVisibility = Visibility.ANY)
+@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class RangerServiceDefList extends VList {
+ private static final long serialVersionUID = 1L;
+
+ List<RangerServiceDef> serviceDefs = new ArrayList<RangerServiceDef>();
+
+ public RangerServiceDefList() {
+ super();
+ }
+
+ public RangerServiceDefList(List<RangerServiceDef> objList) {
+ super(objList);
+ this.serviceDefs = objList;
+ }
+
+ public List<RangerServiceDef> getServiceDefs() {
+ return serviceDefs;
+ }
+
+ public void setServiceDefs(List<RangerServiceDef> serviceDefs) {
+ this.serviceDefs = serviceDefs;
+ }
+
+ @Override
+ public int getListSize() {
+ if (serviceDefs != null) {
+ return serviceDefs.size();
+ }
+ return 0;
+ }
+
+ @Override
+ public List<?> getList() {
+ return serviceDefs;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/java/org/apache/ranger/view/RangerServiceList.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/view/RangerServiceList.java b/security-admin/src/main/java/org/apache/ranger/view/RangerServiceList.java
new file mode 100644
index 0000000..94780e5
--- /dev/null
+++ b/security-admin/src/main/java/org/apache/ranger/view/RangerServiceList.java
@@ -0,0 +1,55 @@
+package org.apache.ranger.view;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.apache.ranger.common.view.VList;
+import org.apache.ranger.plugin.model.RangerService;
+import org.codehaus.jackson.annotate.JsonAutoDetect;
+import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
+import org.codehaus.jackson.map.annotate.JsonSerialize;
+
+@JsonAutoDetect(getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, fieldVisibility = Visibility.ANY)
+@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
+@XmlRootElement
+@XmlAccessorType(XmlAccessType.FIELD)
+public class RangerServiceList extends VList {
+ private static final long serialVersionUID = 1L;
+
+ List<RangerService> services = new ArrayList<RangerService>();
+
+ public RangerServiceList() {
+ super();
+ }
+
+ public RangerServiceList(List<RangerService> objList) {
+ super(objList);
+ this.services = objList;
+ }
+
+ public List<RangerService> getServices() {
+ return services;
+ }
+
+ public void setServices(List<RangerService> services) {
+ this.services = services;
+ }
+
+ @Override
+ public int getListSize() {
+ if (services != null) {
+ return services.size();
+ }
+ return 0;
+ }
+
+ @Override
+ public List<?> getList() {
+ return services;
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/webapp/scripts/collection_bases/RangerPolicyListBase.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/collection_bases/RangerPolicyListBase.js b/security-admin/src/main/webapp/scripts/collection_bases/RangerPolicyListBase.js
index a63e4b2..f81f500 100644
--- a/security-admin/src/main/webapp/scripts/collection_bases/RangerPolicyListBase.js
+++ b/security-admin/src/main/webapp/scripts/collection_bases/RangerPolicyListBase.js
@@ -39,14 +39,8 @@ define(function(require){
*/
initialize : function() {
this.modelName = 'RangerPolicy';
- this.modelAttrName = 'RangerPolicies';
+ this.modelAttrName = 'policies';
this.bindErrorEvents();
- },
- /**
- * override the parseRecords of PageableCollection for our use
- */
- parseRecords : function(resp, options){
- return resp;
}
},{
// static class members
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/webapp/scripts/collection_bases/RangerServiceDefListBase.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/collection_bases/RangerServiceDefListBase.js b/security-admin/src/main/webapp/scripts/collection_bases/RangerServiceDefListBase.js
index 2754f62..9c57b61 100644
--- a/security-admin/src/main/webapp/scripts/collection_bases/RangerServiceDefListBase.js
+++ b/security-admin/src/main/webapp/scripts/collection_bases/RangerServiceDefListBase.js
@@ -39,15 +39,10 @@ define(function(require){
*/
initialize : function() {
this.modelName = 'RangerServiceDef';
- this.modelAttrName = 'RangerServiceDefs';
+ this.modelAttrName = 'serviceDefs';
this.bindErrorEvents();
},
- /**
- * override the parseRecords of PageableCollection for our use
- */
- parseRecords : function(resp, options){
- return resp;
- },
+
comparator: function(def) {
return def.get('id');
}
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/webapp/scripts/collection_bases/RangerServiceListBase.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/collection_bases/RangerServiceListBase.js b/security-admin/src/main/webapp/scripts/collection_bases/RangerServiceListBase.js
index 99d1533..561d98f 100644
--- a/security-admin/src/main/webapp/scripts/collection_bases/RangerServiceListBase.js
+++ b/security-admin/src/main/webapp/scripts/collection_bases/RangerServiceListBase.js
@@ -39,15 +39,9 @@ define(function(require){
*/
initialize : function() {
this.modelName = 'RangerService';
- this.modelAttrName = 'RangerServices';
+ this.modelAttrName = 'services';
this.bindErrorEvents();
},
- /**
- * override the parseRecords of PageableCollection for our use
- */
- parseRecords : function(resp, options){
- return resp;
- }
},{
// static class members
/**
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/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 9915fb5..34a0a94 100644
--- a/security-admin/src/main/webapp/scripts/controllers/Controller.js
+++ b/security-admin/src/main/webapp/scripts/controllers/Controller.js
@@ -58,10 +58,10 @@ define(function(require) {
userAccessReportAction : function(){
MAppState.set({ 'currentTab' : XAGlobals.AppTabs.Analytics.value });
var view = require('views/reports/UserAccessLayout');
- var VXResourceList = require('collections/VXResourceList');
+ var RangerPolicyList = require('collections/RangerPolicyList');
var VXGroupList = require('collections/VXGroupList');
var VXUserList = require('collections/VXUserList');
- var resourceList = new VXResourceList([],{
+ var policyList = new RangerPolicyList([],{
queryParams : {
//'resourceType' : XAEnums.AssetType.ASSET_HDFS.value,
//'assetId' : assetId
@@ -70,29 +70,23 @@ define(function(require) {
var that = this;
this.groupList = new VXGroupList();
this.userList = new VXUserList();
- resourceList.setPageSize(200, {fetch : false});
- resourceList.fetch({
- async:false,
- cache : false
- }).done(function(){
- that.groupList.fetch({
- async:false,
- cache:false
- }).done(function(){
- that.userList.fetch({
- async:false,
- cache:false
- }).done(function(){
- if(App.rContent.currentView)
- App.rContent.currentView.close();
- App.rContent.show(new view({
- collection : resourceList,
- groupList :that.groupList,
- userList :that.userList
- }));
- });
+ that.groupList.fetch({
+ async:false,
+ cache:false
+ }).done(function(){
+ that.userList.fetch({
+ async:false,
+ cache:false
+ }).done(function(){
+ if(App.rContent.currentView)
+ App.rContent.currentView.close();
+ App.rContent.show(new view({
+ collection : policyList,
+ groupList :that.groupList,
+ userList :that.userList
+ }));
});
- });
+ });
},
auditReportAction : function(tab){
MAppState.set({ 'currentTab' : XAGlobals.AppTabs.Audit.value });
@@ -230,7 +224,7 @@ define(function(require) {
var view = require('views/policymanager/ServiceLayout');
var RangerServiceDefList = require('collections/RangerServiceDefList');
var collection = new RangerServiceDefList();
- collection.queryParams.sortBy = 'id';
+ collection.queryParams.sortBy = 'serviceTypeId';
collection.fetch({
cache : false,
async:false
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/webapp/scripts/views/common/XATableLayout.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/common/XATableLayout.js b/security-admin/src/main/webapp/scripts/views/common/XATableLayout.js
index 5556559..12bd6d7 100644
--- a/security-admin/src/main/webapp/scripts/views/common/XATableLayout.js
+++ b/security-admin/src/main/webapp/scripts/views/common/XATableLayout.js
@@ -122,16 +122,19 @@ define(function(require){
this.listenTo(this.collection, "sync reset", this.showHidePager);
this.listenTo(this.collection, 'request', function(){
- $(this.rTableSpinner.el).addClass('loading');
+// $(this.rTableSpinner.el).addClass('loading');
+ this.$el.find(this.rTableSpinner.el).addClass('loading');
},this);
this.listenTo(this.collection, 'sync error', function(){
- $(this.rTableSpinner.el).removeClass('loading');
+// $(this.rTableSpinner.el).removeClass('loading');
+ this.$el.find(this.rTableSpinner.el).removeClass('loading');
},this);
},
/** on render callback */
onRender: function() {
this.initializePlugins();
+
this.renderTable();
if(this.includePagination) {
this.renderPagination();
@@ -171,9 +174,10 @@ define(function(require){
},
showHidePager : function(){
if(this.collection.state && this.collection.state.totalRecords > XAGlobals.settings.PAGE_SIZE) {
- $(this.rPagination.el).show();
+ this.$el.find(this.rPagination.el).show()
+ //$(this.rPagination.el).show();
} else {
- $(this.rPagination.el).hide();
+ this.$el.find(this.rPagination.el).hide();
}
},
renderFilter : function(){
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js b/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
index b938c66..686836b 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/PermissionList.js
@@ -262,19 +262,16 @@ define(function(require) {
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.name
- _.each(that.accessItems, function(item){ if(item.type == type) item.isAllowed = true });
+ var items=[];
+ _.each(that.accessItems, function(item){
+ if($.inArray( item.type, values) >= 0){
+ item.isAllowed = true;
+ items.push(item) ;
}
- });
+ },this);
// Save form data to model
-
- if(!_.isEmpty(that.accessItems))
- that.model.set('accesses', that.accessItems);
+ that.model.set('accesses', items);
$(this).html(valArr.join(" "));
that.ui.addPermissionsSpan.find('i').attr('class', 'icon-pencil');
http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/85d5658f/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 bcbb3e0..42b5f68 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyForm.js
@@ -455,14 +455,14 @@ define(function(require){
},
results: function (data, page) {
var results = [];
- if(data.length > 0){
- results = data.map(function(m, i){ return {id : m, text: m}; });
- }
- /*if(!_.isUndefined(data)){
+ if(!_.isUndefined(data)){
+ if(_.isArray(data) && data.length > 0){
+ results = data.map(function(m, i){ return {id : m, text: m}; });
+ }
if(data.resultSize != "0"){
results = data.vXStrings.map(function(m, i){ return {id : m.value, text: m.value}; });
}
- }*/
+ }
return {
results : results
};