Skip to content

Commit 971a896

Browse files
RANGER-5212: Search filter in Roles tab does not consider all relevant role columns
1 parent 6dc9376 commit 971a896

File tree

2 files changed

+45
-45
lines changed

2 files changed

+45
-45
lines changed

security-admin/src/main/java/org/apache/ranger/biz/RoleDBStore.java

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -299,68 +299,45 @@ public void initStore() {
299299
}
300300

301301
public RangerRoleList getRoles(SearchFilter filter, RangerRoleList rangerRoleList) throws Exception {
302-
List<RangerRole> roles = new ArrayList<>();
303-
List<XXRole> xxRoles = roleService.searchResources(filter, roleService.searchFields, roleService.sortFields, rangerRoleList);
302+
List<RangerRole> roles = getRoles(filter);
304303

305-
if (CollectionUtils.isNotEmpty(xxRoles)) {
306-
for (XXRole xxRole : xxRoles) {
307-
roles.add(roleService.read(xxRole.getId()));
308-
}
309-
}
310-
311-
rangerRoleList.setRoleList(roles);
304+
setPaginatedResult(roles, filter, rangerRoleList);
312305

313306
return rangerRoleList;
314307
}
315308

316-
public RangerRoleList getRolesForUser(SearchFilter filter, RangerRoleList rangerRoleList) {
317-
List<RangerRole> roles = new ArrayList<>();
309+
public RangerRoleList getRolesForUser(SearchFilter filter, RangerRoleList rangerRoleList) throws Exception {
310+
if (filter == null) {
311+
filter = new SearchFilter();
312+
}
313+
314+
List<RangerRole> roles;
318315
UserSessionBase userSession = ContextUtil.getCurrentUserSession();
319316

320317
if (userSession != null && userSession.getUserRoleList().size() == 1 && userSession.getUserRoleList().contains(RangerConstants.ROLE_USER) && userSession.getLoginId() != null) {
321318
VXUser loggedInVXUser = xUserService.getXUserByUserName(userSession.getLoginId());
322319
List<XXRole> xxRoles = daoMgr.getXXRole().findByUserId(loggedInVXUser.getId());
323320

321+
roles = new ArrayList<>();
322+
324323
if (CollectionUtils.isNotEmpty(xxRoles)) {
325324
for (XXRole xxRole : xxRoles) {
326325
roles.add(roleService.read(xxRole.getId()));
327326
}
328327
}
329328

330-
if (predicateUtil != null && filter != null && !filter.isEmpty()) {
329+
if (predicateUtil != null && !filter.isEmpty()) {
331330
List<RangerRole> copy = new ArrayList<>(roles);
332331

333332
predicateUtil.applyFilter(copy, filter);
334333

335334
roles = copy;
336335
}
337-
338-
int totalCount = roles.size();
339-
int startIndex = filter.getStartIndex();
340-
int pageSize = filter.getMaxRows();
341-
int toIndex = Math.min(startIndex + pageSize, totalCount);
342-
343-
if (CollectionUtils.isNotEmpty(roles)) {
344-
roles = roles.subList(startIndex, toIndex);
345-
346-
rangerRoleList.setResultSize(roles.size());
347-
rangerRoleList.setPageSize(filter.getMaxRows());
348-
rangerRoleList.setSortBy(filter.getSortBy());
349-
rangerRoleList.setSortType(filter.getSortType());
350-
rangerRoleList.setStartIndex(filter.getStartIndex());
351-
rangerRoleList.setTotalCount(totalCount);
352-
}
353336
} else {
354-
List<XXRole> xxRoles = roleService.searchResources(filter, roleService.searchFields, roleService.sortFields, rangerRoleList);
355-
356-
if (CollectionUtils.isNotEmpty(xxRoles)) {
357-
for (XXRole xxRole : xxRoles) {
358-
roles.add(roleService.read(xxRole.getId()));
359-
}
360-
}
337+
roles = getRoles(filter);
361338
}
362339

363-
rangerRoleList.setRoleList(roles);
340+
setPaginatedResult(roles, filter, rangerRoleList);
364341

365342
return rangerRoleList;
366343
}
@@ -500,6 +477,26 @@ private boolean ensureRoleNotInZone(String roleName) {
500477
return roleRefZoneCount < 1;
501478
}
502479

480+
private void setPaginatedResult(List<RangerRole> roles, SearchFilter filter, RangerRoleList result) {
481+
int totalCount = roles.size();
482+
int startIndex = filter.getStartIndex();
483+
int pageSize = filter.getMaxRows();
484+
int toIndex = Math.min(startIndex + pageSize, totalCount);
485+
486+
if (CollectionUtils.isNotEmpty(roles)) {
487+
roles = roles.subList(startIndex, toIndex);
488+
489+
result.setResultSize(roles.size());
490+
result.setPageSize(filter.getMaxRows());
491+
result.setSortBy(filter.getSortBy());
492+
result.setSortType(filter.getSortType());
493+
result.setStartIndex(filter.getStartIndex());
494+
result.setTotalCount(totalCount);
495+
}
496+
497+
result.setRoleList(roles);
498+
}
499+
503500
public static class RoleVersionUpdater implements Runnable {
504501
final RangerDaoManager daoManager;
505502

security-admin/src/test/java/org/apache/ranger/biz/TestRoleDBStore.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -138,16 +138,17 @@ public void testGetRoleByRoleId() throws Exception {
138138

139139
@Test
140140
public void testGetRolesBySearchFilter() throws Exception {
141-
RangerRole rangerRole = getRangerRole();
142-
RangerRoleList rangerRoleList = new RangerRoleList(Collections.singletonList(rangerRole));
143-
XXRole xxRole = getTestRole();
144-
List<XXRole> xxRoles = Collections.singletonList(xxRole);
145-
SearchFilter searchFilter = new SearchFilter();
141+
XXRoleDao xxRoleDao = Mockito.mock(XXRoleDao.class);
142+
XXRole xxRole = getTestRole();
143+
List<XXRole> xxRoles = Collections.singletonList(xxRole);
144+
SearchFilter searchFilter = new SearchFilter();
145+
RangerRole rangerRole = getRangerRole();
146146

147-
Mockito.when(roleService.searchResources(searchFilter, roleService.searchFields, roleService.sortFields, rangerRoleList)).thenReturn(xxRoles);
147+
Mockito.when(daoMgr.getXXRole()).thenReturn(xxRoleDao);
148+
Mockito.when(xxRoleDao.getAll()).thenReturn(xxRoles);
148149
Mockito.when(roleService.read(xxRole.getId())).thenReturn(rangerRole);
149150

150-
RangerRoleList rangerRoleListInDB = roleDBStore.getRoles(searchFilter, rangerRoleList);
151+
RangerRoleList rangerRoleListInDB = roleDBStore.getRoles(searchFilter, new RangerRoleList());
151152

152153
Assertions.assertNotNull(rangerRoleListInDB);
153154
Assertions.assertEquals(1, rangerRoleListInDB.getList().size());
@@ -156,12 +157,14 @@ public void testGetRolesBySearchFilter() throws Exception {
156157
@Test
157158
public void testGetRolesForUser_WithoutUserSession() throws Exception {
158159
RangerRole rangerRole = getRangerRole();
159-
RangerRoleList rangerRoleList = new RangerRoleList(Collections.singletonList(rangerRole));
160+
RangerRoleList rangerRoleList = new RangerRoleList();
160161
XXRole xxRole = getTestRole();
161162
List<XXRole> xxRoles = Collections.singletonList(xxRole);
162163
SearchFilter searchFilter = new SearchFilter();
164+
XXRoleDao xxRoleDao = Mockito.mock(XXRoleDao.class);
163165

164-
Mockito.when(roleService.searchResources(searchFilter, roleService.searchFields, roleService.sortFields, rangerRoleList)).thenReturn(xxRoles);
166+
Mockito.when(daoMgr.getXXRole()).thenReturn(xxRoleDao);
167+
Mockito.when(xxRoleDao.getAll()).thenReturn(xxRoles);
165168
Mockito.when(roleService.read(xxRole.getId())).thenReturn(rangerRole);
166169

167170
RangerContextHolder.setSecurityContext(null);

0 commit comments

Comments
 (0)