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

dhavalrajpara 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 fbb179df9 RANGER-5291 : 'User' role users api '/service/roles/roles' 
is giving 400 status (#636)
fbb179df9 is described below

commit fbb179df9c2eb9f2565b5b1dfbbdfde957f4b35c
Author: Dhaval Rajpara <[email protected]>
AuthorDate: Wed Sep 3 12:55:35 2025 +0530

    RANGER-5291 : 'User' role users api '/service/roles/roles' is giving 400 
status (#636)
---
 .../main/java/org/apache/ranger/rest/RoleREST.java | 38 ++++++++++++++++++++++
 .../views/PolicyListing/AddUpdatePolicyForm.jsx    |  8 ++---
 .../src/views/Reports/UserAccessLayout.jsx         | 29 +++++------------
 .../src/views/SecurityZone/SecurityZoneForm.jsx    |  8 ++---
 .../src/views/ServiceManager/ServiceForm.jsx       |  6 ++--
 5 files changed, 57 insertions(+), 32 deletions(-)

diff --git a/security-admin/src/main/java/org/apache/ranger/rest/RoleREST.java 
b/security-admin/src/main/java/org/apache/ranger/rest/RoleREST.java
index 3a80595da..52ed03307 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/RoleREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/RoleREST.java
@@ -63,6 +63,8 @@
 import org.apache.ranger.service.XUserService;
 import org.apache.ranger.view.RangerExportRoleList;
 import org.apache.ranger.view.RangerRoleList;
+import org.apache.ranger.view.VXString;
+import org.apache.ranger.view.VXStringList;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -385,6 +387,42 @@ public RangerRoleList getAllRoles(@Context 
HttpServletRequest request) {
         return ret;
     }
 
+    @GET
+    @Path("/lookup/roles/names")
+    @Produces("application/json")
+    public VXStringList lookupAllRolesNames(@Context HttpServletRequest 
request) {
+        LOG.debug("==> lookupAllRolesNames()");
+
+        VXStringList ret = new VXStringList();
+
+        RangerRoleList rangerRoleList = new RangerRoleList();
+        List<VXString> vXList = new ArrayList<>();
+
+        SearchFilter filter = searchUtil.getSearchFilter(request, 
roleService.sortFields);
+        try {
+            roleStore.getRoles(filter, rangerRoleList);
+            VXString vXString = null;
+            for (RangerRole role : rangerRoleList.getSecurityRoles()) {
+                vXString = new VXString();
+                vXString.setValue(role.getName());
+                vXList.add(vXString);
+            }
+            ret.setVXStrings(vXList);
+            ret.setPageSize(rangerRoleList.getPageSize());
+            ret.setTotalCount(rangerRoleList.getTotalCount());
+            ret.setSortType(rangerRoleList.getSortType());
+            ret.setSortBy(rangerRoleList.getSortBy());
+        } catch (WebApplicationException excp) {
+            throw excp;
+        } catch (Throwable excp) {
+            LOG.error("lookupAllRolesNames() failed", excp);
+            throw restErrorUtil.createRESTException(excp.getMessage());
+        }
+
+        LOG.debug("<== lookupAllRolesNames():{}", ret);
+        return ret;
+    }
+
     /* This operation is allowed only when effective User has ranger admin or 
auditor privilege
      * if execUser is not same as logged-in user then effective user is 
execUser
      * else  effective user is logged-in user.
diff --git 
a/security-admin/src/main/webapp/react-webapp/src/views/PolicyListing/AddUpdatePolicyForm.jsx
 
b/security-admin/src/main/webapp/react-webapp/src/views/PolicyListing/AddUpdatePolicyForm.jsx
index c81d8d5c7..e6b2825c2 100644
--- 
a/security-admin/src/main/webapp/react-webapp/src/views/PolicyListing/AddUpdatePolicyForm.jsx
+++ 
b/security-admin/src/main/webapp/react-webapp/src/views/PolicyListing/AddUpdatePolicyForm.jsx
@@ -216,14 +216,14 @@ export default function AddUpdatePolicyForm() {
     let op = [];
 
     const roleResp = await fetchApi({
-      url: "roles/roles",
+      url: "roles/lookup/roles/names",
       params: params
     });
-    op = roleResp.data.roles;
+    op = roleResp.data.vXStrings;
 
     return op.map((obj) => ({
-      label: obj.name,
-      value: obj.name
+      label: obj.value,
+      value: obj.value
     }));
   };
 
diff --git 
a/security-admin/src/main/webapp/react-webapp/src/views/Reports/UserAccessLayout.jsx
 
b/security-admin/src/main/webapp/react-webapp/src/views/Reports/UserAccessLayout.jsx
index d367e5350..2d30c3c22 100644
--- 
a/security-admin/src/main/webapp/react-webapp/src/views/Reports/UserAccessLayout.jsx
+++ 
b/security-admin/src/main/webapp/react-webapp/src/views/Reports/UserAccessLayout.jsx
@@ -774,15 +774,15 @@ function SearchByAsyncSelect(props) {
     let optsList = [];
     let serverResp = [];
 
-    if (inputValue) {
-      params["name"] = inputValue || "";
-    }
     if (searchByOptName.value == "searchByGroup") {
       apiUrl = "xusers/lookup/groups";
+      params["name"] = inputValue || "";
     } else if (searchByOptName.value == "searchByUser") {
       apiUrl = "xusers/lookup/users";
+      params["name"] = inputValue || "";
     } else if (searchByOptName.value == "searchByRole") {
-      apiUrl = "roles/roles";
+      apiUrl = "roles/lookup/roles/names";
+      params["roleNamePartial"] = inputValue || "";
     }
     if (!isEmpty(apiUrl)) {
       serverResp = await fetchApi({
@@ -790,23 +790,10 @@ function SearchByAsyncSelect(props) {
         params: params
       });
     }
-
-    if (searchByOptName.value == "searchByUser") {
-      optsList = serverResp.data.vXStrings.map((obj) => ({
-        label: obj["value"],
-        value: obj["value"]
-      }));
-    } else if (searchByOptName.value == "searchByRole") {
-      optsList = serverResp.data.roles.map(({ name }) => ({
-        label: name,
-        value: name
-      }));
-    } else {
-      optsList = serverResp.data.vXStrings.map((obj) => ({
-        label: obj["value"],
-        value: obj["value"]
-      }));
-    }
+    optsList = serverResp?.data?.vXStrings.map((obj) => ({
+      label: obj["value"],
+      value: obj["value"]
+    }));
 
     return optsList;
   };
diff --git 
a/security-admin/src/main/webapp/react-webapp/src/views/SecurityZone/SecurityZoneForm.jsx
 
b/security-admin/src/main/webapp/react-webapp/src/views/SecurityZone/SecurityZoneForm.jsx
index a849c6897..12a376458 100644
--- 
a/security-admin/src/main/webapp/react-webapp/src/views/SecurityZone/SecurityZoneForm.jsx
+++ 
b/security-admin/src/main/webapp/react-webapp/src/views/SecurityZone/SecurityZoneForm.jsx
@@ -576,17 +576,17 @@ const SecurityZoneForm = () => {
 
     try {
       const roleResp = await fetchApi({
-        url: "roles/roles",
+        url: "roles/lookup/roles/names",
         params: params
       });
-      op = roleResp.data.roles;
+      op = roleResp?.data?.vXStrings;
     } catch (error) {
       console.error(`Error occurred while fetching Roles! ${error}`);
       serverError(error);
     }
     return op.map((obj) => ({
-      label: obj.name,
-      value: obj.name
+      label: obj.value,
+      value: obj.value
     }));
   };
 
diff --git 
a/security-admin/src/main/webapp/react-webapp/src/views/ServiceManager/ServiceForm.jsx
 
b/security-admin/src/main/webapp/react-webapp/src/views/ServiceManager/ServiceForm.jsx
index a58718e35..40d871904 100644
--- 
a/security-admin/src/main/webapp/react-webapp/src/views/ServiceManager/ServiceForm.jsx
+++ 
b/security-admin/src/main/webapp/react-webapp/src/views/ServiceManager/ServiceForm.jsx
@@ -1040,16 +1040,16 @@ class ServiceForm extends Component {
 
     try {
       const roleResp = await fetchApi({
-        url: "roles/roles",
+        url: "roles/lookup/roles/names",
         params: params
       });
-      op = roleResp.data?.roles;
+      op = roleResp.data?.vXStrings;
     } catch (error) {
       console.error(`Error occurred while fetching Roles ! ${error}`);
     }
 
     return map(op, function (obj) {
-      return { label: obj.name, value: obj.name };
+      return { label: obj.value, value: obj.value };
     });
   };
   ServiceDefnBreadcrumb = () => {

Reply via email to