You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by me...@apache.org on 2017/03/08 04:31:17 UTC
ranger git commit: RANGER-1405 : groups are not shown if exact user
name is passed in search filter
Repository: ranger
Updated Branches:
refs/heads/master 759a7b3e6 -> 6ad60b5d3
RANGER-1405 : groups are not shown if exact user name is passed in search filter
Project: http://git-wip-us.apache.org/repos/asf/ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/ranger/commit/6ad60b5d
Tree: http://git-wip-us.apache.org/repos/asf/ranger/tree/6ad60b5d
Diff: http://git-wip-us.apache.org/repos/asf/ranger/diff/6ad60b5d
Branch: refs/heads/master
Commit: 6ad60b5d3c29685b2867905cfe8386bc71c00fb7
Parents: 759a7b3
Author: Mehul Parikh <me...@apache.org>
Authored: Wed Mar 8 10:00:47 2017 +0530
Committer: Mehul Parikh <me...@apache.org>
Committed: Wed Mar 8 10:00:47 2017 +0530
----------------------------------------------------------------------
.../ranger/services/knox/client/KnoxClient.java | 2 +-
.../java/org/apache/ranger/biz/XUserMgr.java | 100 ++++++++++++++++++-
.../main/webapp/scripts/modules/XAOverrides.js | 3 +-
.../scripts/modules/globalize/message/en.js | 10 +-
.../webapp/scripts/views/reports/AuditLayout.js | 23 ++++-
.../webapp/scripts/views/users/GroupCreate.js | 2 +-
.../webapp/scripts/views/users/UserCreate.js | 2 +-
.../scripts/views/users/UserTableLayout.js | 77 ++++++++++----
8 files changed, 190 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ranger/blob/6ad60b5d/knox-agent/src/main/java/org/apache/ranger/services/knox/client/KnoxClient.java
----------------------------------------------------------------------
diff --git a/knox-agent/src/main/java/org/apache/ranger/services/knox/client/KnoxClient.java b/knox-agent/src/main/java/org/apache/ranger/services/knox/client/KnoxClient.java
index f657795..4c389e3 100644
--- a/knox-agent/src/main/java/org/apache/ranger/services/knox/client/KnoxClient.java
+++ b/knox-agent/src/main/java/org/apache/ranger/services/knox/client/KnoxClient.java
@@ -220,7 +220,7 @@ public class KnoxClient {
JsonNode rootNode = objectMapper.readTree(jsonString);
JsonNode topologyNode = rootNode.findValue("topology");
if (topologyNode != null) {
- JsonNode servicesNode = topologyNode.get("services");
+ JsonNode servicesNode = topologyNode.get("service");
if (servicesNode != null) {
Iterator<JsonNode> services = servicesNode.getElements();
while (services.hasNext()) {
http://git-wip-us.apache.org/repos/asf/ranger/blob/6ad60b5d/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
index 62cffa5..0df25b9 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
@@ -1472,7 +1472,78 @@ public class XUserMgr extends XUserMgrBase {
vXUserListSort = xUserService.searchXUsers(searchCriteria);
vXUserExactMatch = getXUserByUserName((String)searchCriteria.getParamList().get("name"));
}
+ int vXUserExactMatchwithSearchCriteria = 0;
if(vXUserExactMatch != null){
+ vXUserListSort = xUserService.searchXUsers(searchCriteria);
+ HashMap<String, Object> searchCriteriaParamList = searchCriteria.getParamList();
+ vXUserExactMatchwithSearchCriteria = 1;
+ for(String caseKey : searchCriteriaParamList.keySet()){
+ switch (caseKey.toLowerCase()) {
+ case "isvisible":
+ Integer isVisible = vXUserExactMatch.getIsVisible();
+ if(isVisible != null && !isVisible.equals(searchCriteriaParamList.get(caseKey))){
+ vXUserExactMatchwithSearchCriteria = -1;
+ }
+ break;
+ case "status":
+ Integer status = vXUserExactMatch.getStatus();
+ if(status != null && !status.equals(searchCriteriaParamList.get(caseKey))){
+ vXUserExactMatchwithSearchCriteria = -1;
+ }
+ break;
+ case "usersource":
+ Integer userSource = vXUserExactMatch.getUserSource();
+ if(userSource != null && !userSource.equals(searchCriteriaParamList.get(caseKey))){
+ vXUserExactMatchwithSearchCriteria = -1;
+ }
+ break;
+ case "emailaddress":
+ String email = vXUserExactMatch.getEmailAddress();
+ if(email != null && !email.equals(searchCriteriaParamList.get(caseKey))){
+ vXUserExactMatchwithSearchCriteria = -1;
+ }
+ break;
+ case "userrole":
+ if(vXUserExactMatch.getUserRoleList() != null && !vXUserExactMatch.getUserRoleList().contains(searchCriteriaParamList.get(caseKey))){
+ vXUserExactMatchwithSearchCriteria = -1;
+ }
+ break;
+ case "userrolelist":
+ @SuppressWarnings("unchecked")
+ Collection<String> userrolelist = (Collection<String>) searchCriteriaParamList.get(caseKey);
+ if(!CollectionUtils.isEmpty(userrolelist)){
+ for(String role:userrolelist){
+ if(vXUserExactMatch.getUserRoleList() != null && vXUserExactMatch.getUserRoleList().contains(role)){
+ vXUserExactMatchwithSearchCriteria = 1;
+ break;
+ }
+ else{
+ vXUserExactMatchwithSearchCriteria = -1;
+ }
+ }
+ }
+ break;
+ default:
+ logger.warn("XUserMgr.searchXUsers: unexpected searchCriteriaParam:" + caseKey);
+ break;
+ }
+ if(vXUserExactMatchwithSearchCriteria == -1){
+ break;
+ }
+ }
+ }
+ if(vXUserExactMatchwithSearchCriteria == 1){
+ VXGroupList groups = getXUserGroups(vXUserExactMatch.getId());
+ if(groups.getListSize() > 0){
+ Collection<String> groupNameList = new ArrayList<String>();
+ Collection<Long> groupIdList = new ArrayList<Long>();
+ for(VXGroup group:groups.getList()){
+ groupIdList.add(group.getId());
+ groupNameList.add(group.getName());
+ }
+ vXUserExactMatch.setGroupIdList(groupIdList);
+ vXUserExactMatch.setGroupNameList(groupNameList);
+ }
List<VXUser> vXUsers = new ArrayList<VXUser>();
if(searchCriteria.getStartIndex() == 0){
vXUsers.add(0,vXUserExactMatch);
@@ -1523,13 +1594,40 @@ public class XUserMgr extends XUserMgrBase {
vXGroupListSort = xGroupService.searchXGroups(searchCriteria);
vXGroupExactMatch = getGroupByGroupName((String)searchCriteria.getParamList().get("name"));
}
+ int vXGroupExactMatchwithSearchCriteria = 0;
if(vXGroupExactMatch != null){
+ HashMap<String, Object> searchCriteriaParamList = searchCriteria.getParamList();
+ vXGroupExactMatchwithSearchCriteria = 1;
+ for(String caseKey : searchCriteriaParamList.keySet()){
+ switch (caseKey.toLowerCase()) {
+ case "isvisible":
+ Integer isVisible = vXGroupExactMatch.getIsVisible();
+ if(isVisible != null && !isVisible.equals(searchCriteriaParamList.get(caseKey))){
+ vXGroupExactMatchwithSearchCriteria = -1;
+ }
+ break;
+ case "groupsource":
+ Integer groupsource = vXGroupExactMatch.getGroupSource();
+ if(groupsource != null && !groupsource.equals(searchCriteriaParamList.get(caseKey))){
+ vXGroupExactMatchwithSearchCriteria = -1;
+ }
+ break;
+ default:
+ logger.warn("XUserMgr.searchXGroups: unexpected searchCriteriaParam:" + caseKey);
+ break;
+ }
+ if(vXGroupExactMatchwithSearchCriteria == -1){
+ break;
+ }
+ }
+ }
+ if(vXGroupExactMatchwithSearchCriteria == 1){
List<VXGroup> vXGroups = new ArrayList<VXGroup>();
if(searchCriteria.getStartIndex() == 0){
vXGroups.add(0,vXGroupExactMatch);
}
for(VXGroup vXGroup:vXGroupListSort.getList()){
- if(vXGroupExactMatch.getId()!=null && vXGroup!=null){
+ if(vXGroupExactMatch.getId() != null && vXGroup != null){
if(!vXGroupExactMatch.getId().equals(vXGroup.getId())){
vXGroups.add(vXGroup);
}
http://git-wip-us.apache.org/repos/asf/ranger/blob/6ad60b5d/security-admin/src/main/webapp/scripts/modules/XAOverrides.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/modules/XAOverrides.js b/security-admin/src/main/webapp/scripts/modules/XAOverrides.js
index 94ab1c2..1e2b553 100644
--- a/security-admin/src/main/webapp/scripts/modules/XAOverrides.js
+++ b/security-admin/src/main/webapp/scripts/modules/XAOverrides.js
@@ -1291,7 +1291,8 @@
var collection = this.collection;
var selectedModels = this.selectedModels = {};
this.listenTo(collection.fullCollection || collection,
- "backgrid:selected", function (model, selected) {
+ "backgrid:selected", function (model, selected, clearSelectedModels) {
+ if(clearSelectedModels) selectedModels = {};
if (selected) selectedModels[model.id || model.cid] = 1;
else {
delete selectedModels[model.id || model.cid];
http://git-wip-us.apache.org/repos/asf/ranger/blob/6ad60b5d/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js b/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
index 7a4b82c..1551d86 100644
--- a/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
+++ b/security-admin/src/main/webapp/scripts/modules/globalize/message/en.js
@@ -388,7 +388,11 @@ define(function(require) {
noServiceToExport :'No service found to export policies.',
noServiceToImport :'No service found to import policies.',
noPolicytoExport :'No policies found to export!',
- importingFiles :'Importing policies from file is started...'
+ importingFiles :'Importing policies from file is started...',
+ noDeleteUserRow :'Please select user first to delete.',
+ noDeleteGroupRow :'Please select Group first to delete.',
+ plsSelectUserToSetVisibility :' Please select user to set visibility or selected user is already visible/hidden.',
+ plsSelectGroupToSetVisibility:' Please select group to set visibility or selected group is already visible/hidden.',
},
plcHldr : {
@@ -415,8 +419,8 @@ define(function(require) {
passwordError :'Password should be minimum 8 characters with min one alphabet and one numeric.',
userNameValidationMsg :'1. User name should be start with alphabet / numeric / underscore / non-us characters.<br> 2. Allowed special character ,._\-+/@= and space. <br>3. Name length should be greater than one.',
groupNameValidationMsg :'1. Group name should be start with alphabet / numeric / underscore / non-us characters.<br> 2. Allowed special character ,._\-+/@= and space. <br>3. Name length should be greater than one.',
- firstNameValidationMsg :'1. First name should be start with alphabet / numeric / underscore / non-us characters.<br> 2. Allowed special character ._-@ and space. <br>3. Name length should be greater than one.',
- lastNameValidationMsg :'1. Last name should be start with alphabet / numeric / underscore / non-us characters.<br> 2. Allowed special character ._-@ and space. <br>3. Name length should be greater than one.',
+ firstNameValidationMsg :'1. First name should be start with alphabet / numeric / underscore / non-us characters.<br> 2. Allowed special character ._-@ and space. <br>3. Name length should be greater than one.',
+ lastNameValidationMsg :'1. Last name should be start with alphabet / numeric / underscore / non-us characters.<br> 2. Allowed special character ._-@ and space. <br>3. Name length should be greater than one.',
},
serverMsg : {
http://git-wip-us.apache.org/repos/asf/ranger/blob/6ad60b5d/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js b/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js
index 6221149..8a0abb8 100644
--- a/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js
+++ b/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js
@@ -521,7 +521,14 @@ define(function(require) {
callbacks : {
valueMatches :function(facet, searchTerm, callback) {
switch (facet) {
- case 'Audit Type':
+ case 'Service Name':
+ var serviceList = new RangerServiceList();
+ serviceList.setPageSize(100);
+ serviceList.fetch().done(function(){
+ callback(serviceList.map(function(model){return model.get('name');}));
+ });
+ break;
+ case 'Audit Type':
callback([]);
break;
case 'Start Date' :
@@ -561,6 +568,20 @@ define(function(require) {
placeholder : localization.tt('msg.searchForPluginStatus'),
container : this.ui.visualSearch,
query : '',
+ callbacks : {
+ valueMatches :function(facet, searchTerm, callback) {
+ switch (facet) {
+ case 'Service Name':
+ var serviceList = new RangerServiceList();
+ serviceList.setPageSize(100);
+ serviceList.fetch().done(function(){
+ callback(serviceList.map(function(model){return model.get('name');}));
+ });
+ break;
+ }
+
+ }
+ }
}
this.visualSearch = XAUtils.addVisualSearch(searchOpt, serverAttrName, this.pluginInfoList, pluginAttr);
},
http://git-wip-us.apache.org/repos/asf/ranger/blob/6ad60b5d/security-admin/src/main/webapp/scripts/views/users/GroupCreate.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/users/GroupCreate.js b/security-admin/src/main/webapp/scripts/views/users/GroupCreate.js
index f915468..d16cbe5 100644
--- a/security-admin/src/main/webapp/scripts/views/users/GroupCreate.js
+++ b/security-admin/src/main/webapp/scripts/views/users/GroupCreate.js
@@ -129,7 +129,7 @@ define(function(require){
App.appRouter.navigate("#!/users/grouptab",{trigger: true});
var groupList = new VXGroupList();
-
+ _.extend(groupList.queryParams, XAUtil.getUserDataParams());
groupList.fetch({
cache:false
}).done(function(){
http://git-wip-us.apache.org/repos/asf/ranger/blob/6ad60b5d/security-admin/src/main/webapp/scripts/views/users/UserCreate.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/users/UserCreate.js b/security-admin/src/main/webapp/scripts/views/users/UserCreate.js
index 46eff6d..99631f6 100644
--- a/security-admin/src/main/webapp/scripts/views/users/UserCreate.js
+++ b/security-admin/src/main/webapp/scripts/views/users/UserCreate.js
@@ -161,7 +161,7 @@ define(function(require){
App.appRouter.navigate("#!/users/usertab",{trigger: true});
var userList = new VXUserList();
-
+ _.extend(userList.queryParams, XAUtil.getUserDataParams())
userList.fetch({
cache:false
}).done(function(){
http://git-wip-us.apache.org/repos/asf/ranger/blob/6ad60b5d/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js
----------------------------------------------------------------------
diff --git a/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js b/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js
index 4b1b036..8e465d7 100644
--- a/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js
+++ b/security-admin/src/main/webapp/scripts/views/users/UserTableLayout.js
@@ -99,6 +99,7 @@ define(function(require){
/** all events binding here */
bindEvents : function(){
var that = this;
+
/*this.listenTo(this.model, "change:foo", this.modelChanged, this);*/
/*this.listenTo(communicator.vent,'someView:someEvent', this.someEventHandler, this)'*/
},
@@ -111,8 +112,20 @@ define(function(require){
} else {
this.renderUserTab();
}
+ this.bindEventToColl(this.collection);
+ this.bindEventToColl(this.groupList);
this.addVisualSearch();
},
+ bindEventToColl : function(coll){
+ if(_.isUndefined(coll)) return;
+ this.listenTo(coll, "sync reset", function(){
+ this.$el.find('table input[type="checkbox"]').prop('checked',false)
+ coll.each(function(model, key, value){
+ coll.trigger("backgrid:selected", model, false, true);
+ coll.deselect(model);
+ }, this);
+ }, this);
+ },
onTabChange : function(e){
var that = this;
this.chgFlags = [];
@@ -132,22 +145,35 @@ define(function(require){
var updateReq = {};
var collection = this.showUsers ? this.collection : this.groupList;
- _.each(collection.selected, function(m){
- if( m.get('isVisible') != status ){
- m.set('isVisible', status);
+ collection.each(function(m){
+ if(m.selected && m.get('isVisible') != status){
+ m.set('isVisible', status);
m.toServer();
updateReq[m.get('id')] = m.get('isVisible');
}
});
-
+ if(_.isEmpty(updateReq)){
+ if(this.showUsers){
+ XAUtil.alertBoxWithTimeSet(localization.tt('msg.plsSelectUserToSetVisibility'));
+ }else{
+ XAUtil.alertBoxWithTimeSet(localization.tt('msg.plsSelectGroupToSetVisibility'));
+ }
+
+ return;
+ }
var clearCache = function(coll){
- _.each(Backbone.fetchCache._cache, function(url, val){
- var urlStr = coll.url;
- if((val.indexOf(urlStr) != -1)){
- Backbone.fetchCache.clearItem(val);
- }
- });
- coll.fetch({reset: true, cache : false});
+ _.each(Backbone.fetchCache._cache, function(url, val){
+ var urlStr = coll.url;
+ if((val.indexOf(urlStr) != -1)){
+ Backbone.fetchCache.clearItem(val);
+ }
+ });
+ coll.fetch({reset: true, cache:false}).done(function(coll){
+ coll.each(function(model){
+ coll.trigger("backgrid:selected", model, false, true);
+ coll.deselect(model);
+ }, this);
+ })
}
if(this.showUsers){
collection.setUsersVisibility(updateReq, {
@@ -174,11 +200,12 @@ define(function(require){
if(!_.isUndefined(resp) && !_.isUndefined(resp.responseJSON) && !_.isUndefined(resp.responseJSON.msgDesc)){
XAUtil.notifyError('Error', resp.responseJSON.msgDesc);
}else{
- XAUtil.notifyError('Error', "Error occurred while updating user");
+ XAUtil.notifyError('Error', "Error occurred while updating group");
}
collection.trigger('error','',resp)
},
});
+
}
},
renderUserTab : function(){
@@ -227,7 +254,7 @@ define(function(require){
var that = this;
var tableRow = Backgrid.Row.extend({
render: function () {
- tableRow.__super__.render.apply(this, arguments);
+ tableRow.__super__.render.apply(this, arguments);
if(!this.model.get('isVisible')){
this.$el.addClass('tr-inactive');
}
@@ -359,6 +386,7 @@ define(function(require){
}
return this;
},
+
});
this.rTableList.show(new XATableLayout({
columns: this.getGroupColumns(),
@@ -455,8 +483,10 @@ define(function(require){
var collection = that.showUsers ? that.collection : that.groupList;
var selArr = [];
var message = '';
- _.each(collection.selected,function(obj){
- selArr.push(obj.get('name'));
+ collection.each(function(obj){
+ if(obj.selected){
+ selArr.push(obj.get('name'));
+ }
});
var vXStrings = [];
var jsonUsers = {};
@@ -469,9 +499,16 @@ define(function(require){
jsonUsers.vXStrings = vXStrings;
var total_selected = jsonUsers.vXStrings.length;
-
- if(total_selected == 1) {
- message = 'Are you sure you want to delete '+(that.showUsers ? 'user':'group')+' \''+ _.escape( jsonUsers.vXStrings[0].value )+'\'?';
+ if(total_selected == 0){
+ if(that.showUsers){
+ XAUtil.alertBoxWithTimeSet(localization.tt('msg.noDeleteUserRow'));
+ }else{
+ XAUtil.alertBoxWithTimeSet(localization.tt('msg.noDeleteGroupRow'));
+ }
+ return;
+ }
+ if(total_selected == 1) {
+ message = 'Are you sure you want to delete '+(that.showUsers ? 'user':'group')+' \''+ _.escape( jsonUsers.vXStrings[0].value )+'\'?';
}
else {
message = 'Are you sure you want to delete '+total_selected+' '+(that.showUsers ? 'users':'groups')+'?';
@@ -486,7 +523,7 @@ define(function(require){
model.deleteUsers(jsonUsers,{
success: function(response,options){
XAUtil.blockUI('unblock');
- that.onUserGroupDeleteSuccess(jsonUsers,collection);
+ that.collection.getFirstPage({fetch:true});
XAUtil.notifySuccess('Success','User deleted successfully!');
that.collection.selected = {};
},
@@ -501,7 +538,7 @@ define(function(require){
model.deleteGroups(jsonUsers,{
success: function(response){
XAUtil.blockUI('unblock');
- that.onUserGroupDeleteSuccess(jsonUsers,collection);
+ that.groupList.getFirstPage({fetch:true});
XAUtil.notifySuccess('Success','Group deleted successfully!');
that.groupList.selected = {};
},