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 = () => {