You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by pr...@apache.org on 2021/12/22 12:25:29 UTC
[ranger] branch master updated: RANGER-3533 : Provide sorting on columns throughout the audits result set and policy listing page
This is an automated email from the ASF dual-hosted git repository.
pradeep pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git
The following commit(s) were added to refs/heads/master by this push:
new 27b2840 RANGER-3533 : Provide sorting on columns throughout the audits result set and policy listing page
27b2840 is described below
commit 27b28408a162290c1a195fd89ed6db9e28ddcb0d
Author: mateenmansoori <ma...@gmail.com>
AuthorDate: Thu Dec 16 13:04:28 2021 +0530
RANGER-3533 : Provide sorting on columns throughout the audits result set and policy listing page
Signed-off-by: pradeep <pr...@apache.org>
---
.../org/apache/ranger/AccessAuditsService.java | 9 +++++
.../java/org/apache/ranger/rest/ServiceREST.java | 39 +++++++++++++++++++++-
.../apache/ranger/service/XAccessAuditService.java | 11 +++++-
.../main/webapp/scripts/controllers/Controller.js | 3 --
.../views/policies/NRangerPolicyTableLayout.js | 22 ++++++++----
.../views/policies/RangerPolicyTableLayout.js | 30 +++++++++++------
.../webapp/scripts/views/reports/AuditLayout.js | 34 ++++++++++---------
7 files changed, 111 insertions(+), 37 deletions(-)
diff --git a/security-admin/src/main/java/org/apache/ranger/AccessAuditsService.java b/security-admin/src/main/java/org/apache/ranger/AccessAuditsService.java
index e902e65..4d97f28 100644
--- a/security-admin/src/main/java/org/apache/ranger/AccessAuditsService.java
+++ b/security-admin/src/main/java/org/apache/ranger/AccessAuditsService.java
@@ -25,6 +25,7 @@ import org.apache.ranger.common.PropertiesUtil;
import org.apache.ranger.common.RESTErrorUtil;
import org.apache.ranger.common.SearchField;
import org.apache.ranger.common.SortField;
+import org.apache.ranger.common.SortField.SORT_ORDER;
import org.apache.ranger.db.RangerDaoManager;
import org.apache.ranger.plugin.store.EmbeddedServiceDefsUtil;
import org.springframework.beans.factory.annotation.Autowired;
@@ -102,6 +103,14 @@ public class AccessAuditsService {
sortFields.add(new SortField("eventTime", "evtTime", true,
SortField.SORT_ORDER.DESC));
+ sortFields.add(new SortField("policyId", "policy", false, SORT_ORDER.ASC));
+ sortFields.add(new SortField("requestUser", "reqUser", false, SORT_ORDER.ASC));
+ sortFields.add(new SortField("resourceType", "resType", false, SORT_ORDER.ASC));
+ sortFields.add(new SortField("accessType", "access", false, SORT_ORDER.ASC));
+ sortFields.add(new SortField("action", "action", false, SORT_ORDER.ASC));
+ sortFields.add(new SortField("aclEnforcer", "enforcer", false, SORT_ORDER.ASC));
+ sortFields.add(new SortField("zoneName", "zoneName", false, SORT_ORDER.ASC));
+ sortFields.add(new SortField("clientIP", "cliIP", false, SORT_ORDER.ASC));
}
protected void updateUserExclusion(Map<String, Object> paramList) {
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 2f5fda2..8d9d6f8 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
@@ -24,6 +24,7 @@ import java.io.InputStream;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
@@ -84,6 +85,7 @@ import org.apache.ranger.common.RangerConstants;
import org.apache.ranger.common.RangerSearchUtil;
import org.apache.ranger.common.RangerValidatorFactory;
import org.apache.ranger.common.ServiceUtil;
+import org.apache.ranger.common.SortField.SORT_ORDER;
import org.apache.ranger.common.UserSessionBase;
import org.apache.ranger.common.db.RangerTransactionSynchronizationAdapter;
import org.apache.ranger.db.RangerDaoManager;
@@ -2881,7 +2883,6 @@ public class ServiceREST {
RangerPerfTracer perf = null;
SearchFilter filter = searchUtil.getSearchFilter(request, policyService.sortFields);
-
try {
if(RangerPerfTracer.isPerfTraceEnabled(PERF_LOG)) {
perf = RangerPerfTracer.getPerfTracer(PERF_LOG, "ServiceREST.getServicePolicies(serviceId=" + serviceId + ")");
@@ -3858,6 +3859,25 @@ public class ServiceREST {
String sortType = filter.getSortType();
String sortBy = filter.getSortBy();
+ if (StringUtils.isNotEmpty(sortBy) && StringUtils.isNotEmpty(sortType)) {
+ // By default policyList is sorted by policyId in asc order, So handling only desc case.
+ if (SearchFilter.POLICY_ID.equalsIgnoreCase(sortBy)) {
+ if (SORT_ORDER.DESC.name().equalsIgnoreCase(sortType)) {
+ policyList.sort(this.getPolicyComparator(sortBy, sortType));
+ }
+ } else if (SearchFilter.POLICY_NAME.equalsIgnoreCase(sortBy)) {
+ if (SORT_ORDER.ASC.name().equalsIgnoreCase(sortType)) {
+ policyList.sort(this.getPolicyComparator(sortBy, sortType));
+ } else if (SORT_ORDER.DESC.name().equalsIgnoreCase(sortType)) {
+ policyList.sort(this.getPolicyComparator(sortBy, sortType));
+ } else {
+ LOG.info("Invalid or Unsupported sortType : " + sortType);
+ }
+ } else {
+ LOG.info("Invalid or Unsupported sortBy property : " + sortBy);
+ }
+ }
+
List<RangerPolicy> retList = new ArrayList<RangerPolicy>();
for(int i = startIndex; i < toIndex; i++) {
retList.add(policyList.get(i));
@@ -3875,6 +3895,23 @@ public class ServiceREST {
return ret;
}
+ private Comparator<RangerPolicy> getPolicyComparator(String sortBy, String sortType) {
+ Comparator<RangerPolicy> rangerPolComparator = (RangerPolicy me, RangerPolicy other) -> {
+ int ret = 0;
+ if (SearchFilter.POLICY_ID.equalsIgnoreCase(sortBy)) {
+ ret = Long.compare(other.getId(), me.getId());
+ } else if (SearchFilter.POLICY_NAME.equalsIgnoreCase(sortBy)) {
+ if (SORT_ORDER.ASC.name().equalsIgnoreCase(sortType)) {
+ ret = me.getName().compareTo(other.getName());
+ } else if (SORT_ORDER.DESC.name().equalsIgnoreCase(sortType)) {
+ ret = other.getName().compareTo(me.getName());
+ }
+ }
+ return ret;
+ };
+ return rangerPolComparator;
+ }
+
private void validateGrantRevokeRequest(GrantRevokeRequest request, final boolean hasAdminPrivilege, final String loggedInUser) {
if (request != null) {
validateUsersGroupsAndRoles(request.getUsers(),request.getGroups(), request.getRoles());
diff --git a/security-admin/src/main/java/org/apache/ranger/service/XAccessAuditService.java b/security-admin/src/main/java/org/apache/ranger/service/XAccessAuditService.java
index cc23d39..4d96df6 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/XAccessAuditService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/XAccessAuditService.java
@@ -95,7 +95,16 @@ public class XAccessAuditService extends XAccessAuditServiceBase<XXAccessAudit,
SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.FULL));
searchFields.add(new SearchField("agentHost", "obj.agentHost",
SearchField.DATA_TYPE.STRING, SearchField.SEARCH_TYPE.PARTIAL));
- sortFields.add(new SortField("eventTime", "obj.eventTime", true, SORT_ORDER.DESC));
+
+ sortFields.add(new SortField("eventTime", "obj.evtTime", true, SORT_ORDER.DESC));
+ sortFields.add(new SortField("policyId", "obj.policy", false, SORT_ORDER.ASC));
+ sortFields.add(new SortField("requestUser", "obj.reqUser", false, SORT_ORDER.ASC));
+ sortFields.add(new SortField("resourceType", "obj.resType", false, SORT_ORDER.ASC));
+ sortFields.add(new SortField("accessType", "obj.access", false, SORT_ORDER.ASC));
+ sortFields.add(new SortField("action", "obj.action", false, SORT_ORDER.ASC));
+ sortFields.add(new SortField("aclEnforcer", "obj.enforcer", false, SORT_ORDER.ASC));
+ sortFields.add(new SortField("zoneName", "obj.zoneName", false, SORT_ORDER.ASC));
+ sortFields.add(new SortField("clientIP", "obj.cliIP", false, SORT_ORDER.ASC));
}
protected XXAccessAudit mapViewToEntityBean(VXAccessAudit vObj, XXAccessAudit mObj, int OPERATION_CONTEXT) {
diff --git a/security-admin/src/main/webapp/scripts/controllers/Controller.js b/security-admin/src/main/webapp/scripts/controllers/Controller.js
index 7bfce42..d984bac 100755
--- a/security-admin/src/main/webapp/scripts/controllers/Controller.js
+++ b/security-admin/src/main/webapp/scripts/controllers/Controller.js
@@ -98,9 +98,6 @@ define(function(require) {
var accessAuditList = new VXAccessAuditList();
var XAUtil = require('utils/XAUtils');
var localization = require('utils/XALangSupport');
- _.extend(accessAuditList.queryParams, {
- 'sortBy': 'eventTime'
- });
App.rContent.show(new view({
accessAuditList: accessAuditList,
tab: tab
diff --git a/security-admin/src/main/webapp/scripts/views/policies/NRangerPolicyTableLayout.js b/security-admin/src/main/webapp/scripts/views/policies/NRangerPolicyTableLayout.js
index 18664f7..2e32ef7 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/NRangerPolicyTableLayout.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/NRangerPolicyTableLayout.js
@@ -286,7 +286,7 @@ define(function(require) {
getColumns: function() {
var that = this;
var cols = {
- id: {
+ policyId : {
cell: 'html',
label: localization.tt("lbl.policyId"),
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
@@ -317,13 +317,23 @@ define(function(require) {
}
}),
editable: false,
- sortable: false
+ sortable: true,
+ direction: "ascending",
},
- name: {
- cell: 'string',
- label: localization.tt("lbl.policyName"),
+ policyName : {
+ cell : 'string',
+ label : localization.tt("lbl.policyName"),
editable: false,
- sortable: false
+ sortable:true,
+ formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+ fromRaw: function (rawValue, model) {
+ if(model) {
+ return model.get('name');
+ } else {
+ return '--';
+ }
+ }
+ })
},
policyLabels: {
cell: Backgrid.HtmlCell.extend({
diff --git a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js
index c20bcb9..35952d4 100644
--- a/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js
+++ b/security-admin/src/main/webapp/scripts/views/policies/RangerPolicyTableLayout.js
@@ -251,9 +251,9 @@ define(function(require){
getColumns : function(){
var that = this;
var cols = {
- id : {
+ policyId : {
cell : 'html',
- label : localization.tt("lbl.policyId"),
+ label : localization.tt("lbl.policyId"),
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function (rawValue, model) {
if(XAUtil.isAuditorOrKMSAuditor(SessionMgr)){
@@ -281,14 +281,24 @@ define(function(require){
}
}
}),
- editable: false,
- sortable : false
- },
- name : {
- cell : 'string',
- label : localization.tt("lbl.policyName"),
- editable: false,
- sortable : false
+ editable: false,
+ sortable : true,
+ direction: "ascending",
+ },
+ policyName : {
+ cell : 'string',
+ label : localization.tt("lbl.policyName"),
+ editable: false,
+ sortable:true,
+ formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
+ fromRaw: function (rawValue, model) {
+ if(model) {
+ return model.get('name');
+ } else {
+ return '--';
+ }
+ }
+ })
},
policyLabels: {
cell : Backgrid.HtmlCell.extend({className: 'cellWidth-1'}),
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 972e785..1420e90 100644
--- a/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js
+++ b/security-admin/src/main/webapp/scripts/views/reports/AuditLayout.js
@@ -1266,7 +1266,8 @@ define(function(require) {
}),
label : localization.tt("lbl.policyId"),
editable: false,
- sortable : false
+ sortable : true,
+ sortType: 'toggle',
},
policyVersion: {
label : localization.tt("lbl.policyVersion"),
@@ -1289,9 +1290,9 @@ define(function(require) {
eventTime : {
label : 'Event Time',
cell: "String",
- click : false,
- drag : false,
editable:false,
+ sortable : true,
+ direction: "descending",
sortType: 'toggle',
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function (rawValue, model) {
@@ -1313,7 +1314,8 @@ define(function(require) {
click : false,
drag : false,
editable:false,
- sortable : false,
+ sortable : true,
+ sortType: 'toggle',
},
repoName : {
label : 'Service (Name / Type)',
@@ -1332,31 +1334,31 @@ define(function(require) {
resourceType: {
label : 'Resource (Name / Type)',
cell: "html",
- click: false,
formatter: _.extend({},Backgrid.CellFormatter.prototype,{
fromRaw: function(rawValue,model) {
return XAViewUtils.resourceTypeFormatter(rawValue, model);
}
}),
drag: false,
- sortable: false,
+ sortable: true,
+ sortType: 'toggle',
editable: false,
},
accessType : {
label : localization.tt("lbl.accessType"),
cell: "String",
- click : false,
drag : false,
- sortable:false,
+ sortable:true,
+ sortType: 'toggle',
editable:false
},
action : {
label : localization.tt("lbl.permission"),
cell: "html",
- click : false,
drag : false,
editable:false,
- sortable : false,
+ sortable : true,
+ sortType: 'toggle',
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw : function (rawValue, model) {
rawValue = _.escape(rawValue);
@@ -1395,9 +1397,9 @@ define(function(require) {
aclEnforcer : {
label :localization.tt("lbl.aclEnforcer"),
cell: "String",
- click : false,
drag : false,
- sortable:false,
+ sortable:true,
+ sortType: 'toggle',
editable:false
},
agentHost : {
@@ -1419,9 +1421,9 @@ define(function(require) {
clientIP : {
label : 'Client IP',
cell: "string",
- click : false,
drag : false,
- sortable:false,
+ sortable:true,
+ sortType: 'toggle',
editable:false
},
clusterName : {
@@ -1445,7 +1447,6 @@ define(function(require) {
zoneName: {
label : localization.tt("lbl.zoneName"),
cell: "html",
- click: false,
formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
fromRaw: function (rawValue, model) {
rawValue = _.escape(rawValue);
@@ -1457,7 +1458,8 @@ define(function(require) {
}
}),
drag: false,
- sortable: false,
+ sortable: true,
+ sortType: 'toggle',
editable: false,
},