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 d8e30b516a..771a18db34 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 @@ -76,6 +76,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; @@ -358,6 +360,42 @@ public RangerRole getRole(@PathParam("id") Long id) { 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 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 c81d8d5c77..e6b2825c26 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 6d57247782..07796dc947 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 @@ -800,15 +800,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({ @@ -816,23 +816,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 99cd12d8d2..b69c80ef6b 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 @@ -574,17 +574,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 15539b22fd..d8da45ffd6 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 @@ -1035,16 +1035,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 = () => {