This is an automated email from the ASF dual-hosted git repository.

vikaskr22 pushed a commit to branch ranger-2.10
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/ranger-2.10 by this push:
     new a77d36275 RANGER-5792: Align to best practices for User rest API 
(#1230) (#1248)
a77d36275 is described below

commit a77d36275feff5934c81462bd5eb52c3528e2756
Author: Dineshkumar Yadav <[email protected]>
AuthorDate: Sat Sep 26 19:14:01 2026 +0530

    RANGER-5792: Align to best practices for User rest API (#1230) (#1248)
    
    Co-authored-by: Vikas Kumar <[email protected]>
    Co-authored-by: Madhan Neethiraj <[email protected]>
    Co-authored-by: Cursor <[email protected]>
---
 .../java/org/apache/ranger/biz/RangerBizUtil.java  | 17 +++++++++--------
 .../main/java/org/apache/ranger/biz/UserMgr.java   |  4 ++--
 .../main/java/org/apache/ranger/biz/XUserMgr.java  | 22 ++++++++++------------
 .../java/org/apache/ranger/common/StringUtil.java  |  9 +++++++++
 4 files changed, 30 insertions(+), 22 deletions(-)

diff --git 
a/security-admin/src/main/java/org/apache/ranger/biz/RangerBizUtil.java 
b/security-admin/src/main/java/org/apache/ranger/biz/RangerBizUtil.java
index d48752fba..cb096f0d3 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/RangerBizUtil.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/RangerBizUtil.java
@@ -1361,19 +1361,20 @@ public boolean checkUserAccessible(VXUser vXUser) {
                 boolean isAccessible = true;
                 Collection<String> roleList = userMgr.getRolesByLoginId(vXUser
                                 .getName());
+                Collection<String> payloadRoles = vXUser.getUserRoleList();
                 if (isKeyAdmin()) {
-                        if 
(vXUser.getUserRoleList().contains(RangerConstants.ROLE_SYS_ADMIN)
-                                        || 
vXUser.getUserRoleList().contains(RangerConstants.ROLE_ADMIN_AUDITOR)
-                                        || 
roleList.contains(RangerConstants.ROLE_SYS_ADMIN)
-                                        || 
roleList.contains(RangerConstants.ROLE_ADMIN_AUDITOR)) {
+                        if (StringUtil.containsIgnoreCase(payloadRoles, 
RangerConstants.ROLE_SYS_ADMIN)
+                                        || 
StringUtil.containsIgnoreCase(payloadRoles, RangerConstants.ROLE_ADMIN_AUDITOR)
+                                        || 
StringUtil.containsIgnoreCase(roleList, RangerConstants.ROLE_SYS_ADMIN)
+                                        || 
StringUtil.containsIgnoreCase(roleList, RangerConstants.ROLE_ADMIN_AUDITOR)) {
                                 isAccessible = false;
                         }
                 }
                 if (isAdmin()) {
-                        if 
(vXUser.getUserRoleList().contains(RangerConstants.ROLE_KEY_ADMIN)
-                                        || 
vXUser.getUserRoleList().contains(RangerConstants.ROLE_KEY_ADMIN_AUDITOR)
-                                        || 
roleList.contains(RangerConstants.ROLE_KEY_ADMIN)
-                                        || 
roleList.contains(RangerConstants.ROLE_KEY_ADMIN_AUDITOR)) {
+                        if (StringUtil.containsIgnoreCase(payloadRoles, 
RangerConstants.ROLE_KEY_ADMIN)
+                                        || 
StringUtil.containsIgnoreCase(payloadRoles, 
RangerConstants.ROLE_KEY_ADMIN_AUDITOR)
+                                        || 
StringUtil.containsIgnoreCase(roleList, RangerConstants.ROLE_KEY_ADMIN)
+                                        || 
StringUtil.containsIgnoreCase(roleList, 
RangerConstants.ROLE_KEY_ADMIN_AUDITOR)) {
                                 isAccessible = false;
                         }
                 }
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/UserMgr.java 
b/security-admin/src/main/java/org/apache/ranger/biz/UserMgr.java
index 35be7580d..b0254d212 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/UserMgr.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/UserMgr.java
@@ -283,10 +283,10 @@ public boolean updateRoles(Long userId, 
Collection<String> rolesList) {
                }
                List<String> stringRolesList = new ArrayList<String>();
                for (String userRole : rolesList) {
-                       if(!VALID_ROLE_LIST.contains(userRole.toUpperCase())){
+                       if (userRole == null || 
!VALID_ROLE_LIST.contains(userRole.trim().toUpperCase())) {
                                throw 
restErrorUtil.createRESTException("Invalid user role, please provide valid user 
role.",MessageEnums.INVALID_INPUT_DATA);
                        }
-                       stringRolesList.add(userRole);
+                       stringRolesList.add(userRole.trim().toUpperCase());
                }
                xUserMgr.checkAccessRoles(stringRolesList);
                 rangerBizUtil.blockAuditorRoleUser();
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 973936239..61c781090 100755
--- a/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/XUserMgr.java
@@ -848,17 +848,15 @@ private boolean hasAccessToGetUserInfo(VXUser 
requestedVXUser) {
                if (userSession != null && userSession.getLoginId() != null) {
                        VXUser loggedInVXUser = 
xUserService.getXUserByUserName(userSession.getLoginId());
                        if (requestedVXUser != null && 
CollectionUtils.isNotEmpty(requestedVXUser.getUserRoleList()) && loggedInVXUser 
!= null && loggedInVXUser.getUserRoleList().size() == 1) {
-                               if 
(loggedInVXUser.getUserRoleList().contains(RangerConstants.ROLE_USER)) {
-                                       return 
requestedVXUser.getId().equals(loggedInVXUser.getId()) ? true : false;
-                               } else if 
(loggedInVXUser.getUserRoleList().contains(RangerConstants.ROLE_KEY_ADMIN) || 
loggedInVXUser.getUserRoleList().contains(RangerConstants.ROLE_KEY_ADMIN_AUDITOR))
 {
-                                       if 
(requestedVXUser.getUserRoleList().contains(RangerConstants.ROLE_KEY_ADMIN) || 
requestedVXUser.getUserRoleList().contains(RangerConstants.ROLE_KEY_ADMIN_AUDITOR)
 || requestedVXUser.getUserRoleList().contains(RangerConstants.ROLE_USER)) {
-                                               return true;
-                                       }
-                               } else if 
(loggedInVXUser.getUserRoleList().contains(RangerConstants.ROLE_SYS_ADMIN) || 
loggedInVXUser.getUserRoleList().contains(RangerConstants.ROLE_ADMIN_AUDITOR)) {
-                                       if 
(loggedInVXUser.getUserRoleList().contains(RangerConstants.ROLE_SYS_ADMIN) && 
"rangerusersync".equalsIgnoreCase(userSession.getLoginId())) {
-                                               return true;
-                                       } else if 
(requestedVXUser.getUserRoleList().contains(RangerConstants.ROLE_SYS_ADMIN) || 
requestedVXUser.getUserRoleList().contains(RangerConstants.ROLE_ADMIN_AUDITOR) 
|| requestedVXUser.getUserRoleList().contains(RangerConstants.ROLE_USER)) {
+                               if 
(StringUtil.containsIgnoreCase(loggedInVXUser.getUserRoleList(), 
RangerConstants.ROLE_USER)) {
+                                       return 
requestedVXUser.getId().equals(loggedInVXUser.getId());
+                               } else if 
(StringUtil.containsIgnoreCase(loggedInVXUser.getUserRoleList(), 
RangerConstants.ROLE_KEY_ADMIN) || 
StringUtil.containsIgnoreCase(loggedInVXUser.getUserRoleList(), 
RangerConstants.ROLE_KEY_ADMIN_AUDITOR)) {
+                                       return 
StringUtil.containsIgnoreCase(requestedVXUser.getUserRoleList(), 
RangerConstants.ROLE_KEY_ADMIN) || 
StringUtil.containsIgnoreCase(requestedVXUser.getUserRoleList(), 
RangerConstants.ROLE_KEY_ADMIN_AUDITOR) || 
StringUtil.containsIgnoreCase(requestedVXUser.getUserRoleList(), 
RangerConstants.ROLE_USER);
+                               } else if 
(StringUtil.containsIgnoreCase(loggedInVXUser.getUserRoleList(), 
RangerConstants.ROLE_SYS_ADMIN) || 
StringUtil.containsIgnoreCase(loggedInVXUser.getUserRoleList(), 
RangerConstants.ROLE_ADMIN_AUDITOR)) {
+                                       if 
(StringUtil.containsIgnoreCase(loggedInVXUser.getUserRoleList(), 
RangerConstants.ROLE_SYS_ADMIN) && 
"rangerusersync".equalsIgnoreCase(userSession.getLoginId())) {
                                                return true;
+                                       } else {
+                                               return 
StringUtil.containsIgnoreCase(requestedVXUser.getUserRoleList(), 
RangerConstants.ROLE_SYS_ADMIN) || 
StringUtil.containsIgnoreCase(requestedVXUser.getUserRoleList(), 
RangerConstants.ROLE_ADMIN_AUDITOR) || 
StringUtil.containsIgnoreCase(requestedVXUser.getUserRoleList(), 
RangerConstants.ROLE_USER);
                                        }
                                }
                        }
@@ -1502,9 +1500,9 @@ public void checkAccessRoles(List<String> 
stringRolesList) {
                                throw 
restErrorUtil.create403RESTException("Permission denied. LoggedInUser=" + 
(session != null ? session.getXXPortalUser().getId() : "Not Logged In") + " 
,isn't permitted to perform the action.");
                        } else {
                                if 
(!"rangerusersync".equals(session.getXXPortalUser().getLoginId())) {// new 
logic for rangerusersync user
-                                       if (session.isUserAdmin() && 
(stringRolesList.contains(RangerConstants.ROLE_KEY_ADMIN) || 
stringRolesList.contains(RangerConstants.ROLE_KEY_ADMIN_AUDITOR))) {
+                                       if (session.isUserAdmin() && 
(StringUtil.containsIgnoreCase(stringRolesList, RangerConstants.ROLE_KEY_ADMIN) 
|| StringUtil.containsIgnoreCase(stringRolesList, 
RangerConstants.ROLE_KEY_ADMIN_AUDITOR))) {
                                                throw 
restErrorUtil.create403RESTException("Permission denied. LoggedInUser=" + 
(session != null ? session.getXXPortalUser().getId() : "") + " isn't permitted 
to perform the action.");
-                                       } else if (session.isKeyAdmin() && 
(stringRolesList.contains(RangerConstants.ROLE_SYS_ADMIN) || 
stringRolesList.contains(RangerConstants.ROLE_ADMIN_AUDITOR))) {
+                                       } else if (session.isKeyAdmin() && 
(StringUtil.containsIgnoreCase(stringRolesList, RangerConstants.ROLE_SYS_ADMIN) 
|| StringUtil.containsIgnoreCase(stringRolesList, 
RangerConstants.ROLE_ADMIN_AUDITOR))) {
                                                throw 
restErrorUtil.create403RESTException("Permission denied. LoggedInUser=" + 
(session != null ? session.getXXPortalUser().getId() : "") + " isn't permitted 
to perform the action.");
                                        }
                                }
diff --git 
a/security-admin/src/main/java/org/apache/ranger/common/StringUtil.java 
b/security-admin/src/main/java/org/apache/ranger/common/StringUtil.java
index 275c883c5..870e35664 100644
--- a/security-admin/src/main/java/org/apache/ranger/common/StringUtil.java
+++ b/security-admin/src/main/java/org/apache/ranger/common/StringUtil.java
@@ -23,6 +23,7 @@
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.regex.Matcher;
@@ -258,4 +259,12 @@ public static String getUTFEncodedString(String username) 
throws UnsupportedEnco
                return URLEncoder.encode(username, 
StandardCharsets.UTF_8.toString());
        }
 
+       public static boolean containsIgnoreCase(Collection<String> values, 
String str) {
+               if (values != null && str != null) {
+                       return values.stream().anyMatch(str::equalsIgnoreCase);
+               }
+
+               return false;
+       }
+
 }

Reply via email to