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

mehul pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git

commit c1dcb789befac2101eb4a09512791007b43b7b85
Author: Mugdha Varadkar <[email protected]>
AuthorDate: Thu Aug 24 14:08:02 2023 +0530

    RANGER-4367: User with access on Key manager tab not able to view the 
"Encryption" tab on the React UI
    
    Signed-off-by: Mehul Parikh <[email protected]>
---
 .../src/views/Encryption/KeyManager.jsx            | 66 ++++++++++++----------
 .../src/views/Reports/SearchPolicyTable.jsx        | 31 ++++++----
 .../src/views/Reports/UserAccessLayout.jsx         | 34 ++++++-----
 .../react-webapp/src/views/SideBar/SideBar.jsx     | 32 +++++------
 4 files changed, 92 insertions(+), 71 deletions(-)

diff --git 
a/security-admin/src/main/webapp/react-webapp/src/views/Encryption/KeyManager.jsx
 
b/security-admin/src/main/webapp/react-webapp/src/views/Encryption/KeyManager.jsx
index fa5f975b7..401c960b2 100644
--- 
a/security-admin/src/main/webapp/react-webapp/src/views/Encryption/KeyManager.jsx
+++ 
b/security-admin/src/main/webapp/react-webapp/src/views/Encryption/KeyManager.jsx
@@ -505,36 +505,40 @@ const KeyManager = (props) => {
         Header: "Action",
         accessor: "action",
         Cell: (rawValue) => {
-          return (
-            <div className="text-center">
-              <Button
-                className="btn btn-outline-dark btn-sm m-r-5"
-                size="sm"
-                title="Edit"
-                onClick={() => {
-                  editModal(rawValue.row.original.name);
-                }}
-                data-name="rolloverKey"
-                data-id={rawValue.row.original.name}
-                data-cy={rawValue.row.original.name}
-              >
-                <i className="fa-fw fa fa-edit"></i>
-              </Button>
-              <Button
-                variant="danger"
-                size="sm"
-                title="Delete"
-                onClick={() => {
-                  deleteModal(rawValue.row.original.name);
-                }}
-                data-name="deleteKey"
-                data-id={rawValue.row.original.name}
-                data-cy={rawValue.row.original.name}
-              >
-                <i className="fa-fw fa fa-trash"></i>
-              </Button>
-            </div>
-          );
+          if (isKeyAdmin()) {
+            return (
+              <div className="text-center">
+                <Button
+                  className="btn btn-outline-dark btn-sm m-r-5"
+                  size="sm"
+                  title="Edit"
+                  onClick={() => {
+                    editModal(rawValue.row.original.name);
+                  }}
+                  data-name="rolloverKey"
+                  data-id={rawValue.row.original.name}
+                  data-cy={rawValue.row.original.name}
+                >
+                  <i className="fa-fw fa fa-edit"></i>
+                </Button>
+                <Button
+                  variant="danger"
+                  size="sm"
+                  title="Delete"
+                  onClick={() => {
+                    deleteModal(rawValue.row.original.name);
+                  }}
+                  data-name="deleteKey"
+                  data-id={rawValue.row.original.name}
+                  data-cy={rawValue.row.original.name}
+                >
+                  <i className="fa-fw fa fa-trash"></i>
+                </Button>
+              </div>
+            );
+          } else {
+            return <div className="text-center">--</div>;
+          }
         },
         width: 80
       }
@@ -600,7 +604,7 @@ const KeyManager = (props) => {
               defaultSelected={defaultSearchFilterParams}
             />
           </Col>
-          {isKeyAdmin && (
+          {isKeyAdmin() && (
             <Col sm={2} className="text-right">
               <Button
                 className={onchangeval !== null ? "" : "button-disabled"}
diff --git 
a/security-admin/src/main/webapp/react-webapp/src/views/Reports/SearchPolicyTable.jsx
 
b/security-admin/src/main/webapp/react-webapp/src/views/Reports/SearchPolicyTable.jsx
index 0fd79851c..08e3d5ebd 100644
--- 
a/security-admin/src/main/webapp/react-webapp/src/views/Reports/SearchPolicyTable.jsx
+++ 
b/security-admin/src/main/webapp/react-webapp/src/views/Reports/SearchPolicyTable.jsx
@@ -34,6 +34,7 @@ import { MoreLess } from "Components/CommonComponents";
 import XATableLayout from "Components/XATableLayout";
 import { fetchApi } from "Utils/fetchAPI";
 import { Loader } from "../../components/CommonComponents";
+import { isAuditor, isKMSAuditor } from "../../utils/XAUtils";
 
 function SearchPolicyTable(props) {
   const [searchPoliciesData, setSearchPolicies] = useState([]);
@@ -95,16 +96,26 @@ function SearchPolicyTable(props) {
         Header: "Policy ID",
         accessor: "id",
         Cell: (rawValue) => {
-          return (
-            <Link
-              title="Edit"
-              to={`/service/${getServiceId(
-                rawValue.row.original.service
-              )}/policies/${rawValue.value}/edit`}
-            >
-              {rawValue.value}
-            </Link>
-          );
+          if (isAuditor() || isKMSAuditor()) {
+            return (
+              <div className="position-relative text-center">
+                {rawValue.value}
+              </div>
+            );
+          } else {
+            return (
+              <div className="position-relative text-center">
+                <Link
+                  title="Edit"
+                  to={`/service/${getServiceId(
+                    rawValue.row.original.service
+                  )}/policies/${rawValue.value}/edit`}
+                >
+                  {rawValue.value}
+                </Link>
+              </div>
+            );
+          }
         },
         width: 65
       },
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 fc4d50093..1adcc6b3b 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
@@ -49,12 +49,18 @@ import { toast } from "react-toastify";
 import { fetchApi } from "Utils/fetchAPI";
 import { useQuery } from "../../components/CommonComponents";
 import SearchPolicyTable from "./SearchPolicyTable";
-import { getBaseUrl, isKeyAdmin, isKMSAuditor } from "../../utils/XAUtils";
+import {
+  getBaseUrl,
+  isAuditor,
+  isKeyAdmin,
+  isKMSAuditor
+} from "../../utils/XAUtils";
 import CustomBreadcrumb from "../CustomBreadcrumb";
 import moment from "moment-timezone";
 
 function UserAccessLayout(props) {
   const isKMSRole = isKeyAdmin() || isKMSAuditor();
+  const isAuditRole = isAuditor() || isKMSAuditor();
   const [show, setShow] = useState(true);
   const [contentLoader, setContentLoader] = useState(true);
   const [serviceDefs, setServiceDefs] = useState([]);
@@ -151,21 +157,19 @@ function UserAccessLayout(props) {
   };
 
   const fetchZones = async () => {
-    let zonesResp;
+    let zonesResp = [];
     try {
-      zonesResp = await fetchApi({
+      const response = await fetchApi({
         url: "zones/zones"
       });
+      zonesResp = response?.data?.securityZones || [];
     } catch (error) {
       console.error(`Error occurred while fetching Zones! ${error}`);
     }
 
-    let zonesList = map(
-      sortBy(zonesResp.data.securityZones, ["name"]),
-      function (zone) {
-        return { value: zone.name, label: zone.name };
-      }
-    );
+    let zonesList = map(sortBy(zonesResp, ["name"]), function (zone) {
+      return { value: zone.name, label: zone.name };
+    });
 
     setZones(zonesResp?.data?.securityZones || []);
     setZoneNameOpts(zonesList);
@@ -774,10 +778,14 @@ function UserAccessLayout(props) {
                 <Dropdown.Item onClick={() => exportPolicy("csv")}>
                   CSV file
                 </Dropdown.Item>
-                <Dropdown.Divider />
-                <Dropdown.Item onClick={() => exportPolicy("exportJson")}>
-                  JSON file
-                </Dropdown.Item>
+                {!isAuditRole && (
+                  <React.Fragment>
+                    <Dropdown.Divider />
+                    <Dropdown.Item onClick={() => exportPolicy("exportJson")}>
+                      JSON file
+                    </Dropdown.Item>
+                  </React.Fragment>
+                )}
               </Dropdown.Menu>
             </Dropdown>
           </Col>
diff --git 
a/security-admin/src/main/webapp/react-webapp/src/views/SideBar/SideBar.jsx 
b/security-admin/src/main/webapp/react-webapp/src/views/SideBar/SideBar.jsx
index 4dad6cab9..e0ad55d59 100644
--- a/security-admin/src/main/webapp/react-webapp/src/views/SideBar/SideBar.jsx
+++ b/security-admin/src/main/webapp/react-webapp/src/views/SideBar/SideBar.jsx
@@ -345,7 +345,7 @@ export const SideBar = () => {
 
           {hasAccessToTab("Security Zone") && (
             <React.Fragment>
-              {!isKeyAdmin() && (
+              {!isKMSRole && (
                 <li>
                   <NavLink
                     className={activeClass("Security Zone")}
@@ -366,22 +366,20 @@ export const SideBar = () => {
 
           {hasAccessToTab("Key Manager") && (
             <React.Fragment>
-              {(isKeyAdmin() || isKMSAuditor()) && (
-                <li>
-                  <NavLink
-                    className={activeClass("Key Manager")}
-                    to="/kms/keys/new/manage/service"
-                    onClick={() => {
-                      setActive(null);
-                      setDrawer(false);
-                      setAccountDrawer(false);
-                    }}
-                  >
-                    <i className="fa fa-fw fa-key"></i>
-                    <span>Key Manager</span>
-                  </NavLink>
-                </li>
-              )}
+              <li>
+                <NavLink
+                  className={activeClass("Key Manager")}
+                  to="/kms/keys/new/manage/service"
+                  onClick={() => {
+                    setActive(null);
+                    setDrawer(false);
+                    setAccountDrawer(false);
+                  }}
+                >
+                  <i className="fa fa-fw fa-key"></i>
+                  <span>Key Manager</span>
+                </NavLink>
+              </li>
             </React.Fragment>
           )}
 

Reply via email to