Edit Feedback Request Permissions Below:
From 3704a7b92cc348459afc51a8ef6d71f68593c98e Mon Sep 17 00:00:00 2001
From: S78901 <39834839+S78901@users.noreply.github.com>
Date: Mon, 26 Feb 2024 12:16:44 -0600
Subject: [PATCH 16/37] [2064] Solution for CSRF
---
web-ui/src/pages/EditPermissionsPage.jsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/web-ui/src/pages/EditPermissionsPage.jsx b/web-ui/src/pages/EditPermissionsPage.jsx
index 4e6b710190..d2ebd19fbc 100644
--- a/web-ui/src/pages/EditPermissionsPage.jsx
+++ b/web-ui/src/pages/EditPermissionsPage.jsx
@@ -386,7 +386,7 @@ const EditPermissionsPage = (props) => {
console.log(memberRoles);
console.log("Current User Role:");
console.log(currentUserRole);
- }, [memberRoles, currentUserRole, csrf]);
+ }, [memberRoles, currentUserRole, csrf, rolePermissionsList, currentUserId]);
useEffect(() => {
let adminRole = filterObjectByValOrKey(
From 7a08cc71e6c62582b0d3ed5294c959c5e8e7b4d2 Mon Sep 17 00:00:00 2001
From: S78901 <39834839+S78901@users.noreply.github.com>
Date: Thu, 29 Feb 2024 09:26:44 -0600
Subject: [PATCH 17/37] [2064] Remove unneeded section
---
web-ui/src/pages/EditPermissionsPage.jsx | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/web-ui/src/pages/EditPermissionsPage.jsx b/web-ui/src/pages/EditPermissionsPage.jsx
index d2ebd19fbc..08a9ad7abb 100644
--- a/web-ui/src/pages/EditPermissionsPage.jsx
+++ b/web-ui/src/pages/EditPermissionsPage.jsx
@@ -347,9 +347,7 @@ const EditPermissionsPage = (props) => {
doTask1();
doTask2();
doTask3();
- } else {
- window.location.reload(true);
- }
+ }
}, [csrf]);
// useEffect(() => {
From daef620278885d4657119ff0362214076f0ef99b Mon Sep 17 00:00:00 2001
From: S78901 <39834839+S78901@users.noreply.github.com>
Date: Mon, 4 Mar 2024 00:19:58 -0600
Subject: [PATCH 18/37] [2064] Fix role ID's
---
web-ui/src/pages/EditPermissionsPageRoles.jsx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/web-ui/src/pages/EditPermissionsPageRoles.jsx b/web-ui/src/pages/EditPermissionsPageRoles.jsx
index 0f7b4fe17f..86167fa1fb 100644
--- a/web-ui/src/pages/EditPermissionsPageRoles.jsx
+++ b/web-ui/src/pages/EditPermissionsPageRoles.jsx
@@ -23,7 +23,7 @@ const EditPermissionsPageRoles = ({
@@ -31,7 +31,7 @@ const EditPermissionsPageRoles = ({
From 3919d18db72a2db02f649976d55f313bd04f8439 Mon Sep 17 00:00:00 2001
From: S78901 <39834839+S78901@users.noreply.github.com>
Date: Mon, 4 Mar 2024 00:20:23 -0600
Subject: [PATCH 19/37] [2064] Add Post action for role permissions
---
web-ui/src/api/rolepermissions.js | 24 +++++++++++++++++-------
1 file changed, 17 insertions(+), 7 deletions(-)
diff --git a/web-ui/src/api/rolepermissions.js b/web-ui/src/api/rolepermissions.js
index 9fe5e3c2bb..8353dd278f 100644
--- a/web-ui/src/api/rolepermissions.js
+++ b/web-ui/src/api/rolepermissions.js
@@ -1,11 +1,21 @@
import { resolve } from "./api.js";
-const rolePermissionsListUrl = "/services/roles/role-permissions"
+const rolePermissionsListUrl = "/services/roles/role-permissions";
export const getRolePermissionsList = async (cookie) => {
- return resolve({
- url: rolePermissionsListUrl,
- responseType: "json",
- headers: { "X-CSRF-Header": cookie },
- });
- };
\ No newline at end of file
+ return resolve({
+ url: rolePermissionsListUrl,
+ responseType: "json",
+ headers: { "X-CSRF-Header": cookie },
+ });
+};
+
+export const postRolePermissionsList = async (roleData, cookie) => {
+ return resolve({
+ method: "post",
+ url: rolePermissionsListUrl,
+ responseType: "json",
+ data: roleData,
+ headers: { "X-CSRF-Header": cookie },
+ });
+};
From c3191f406d419339694c5003c6b0475aa9380a8c Mon Sep 17 00:00:00 2001
From: S78901 <39834839+S78901@users.noreply.github.com>
Date: Mon, 4 Mar 2024 01:08:22 -0600
Subject: [PATCH 20/37] [2064] Role permissions adjustments
---
web-ui/src/pages/EditPermissionsPage.jsx | 44 +++++++++++++++++++++---
1 file changed, 40 insertions(+), 4 deletions(-)
diff --git a/web-ui/src/pages/EditPermissionsPage.jsx b/web-ui/src/pages/EditPermissionsPage.jsx
index 08a9ad7abb..4a07694280 100644
--- a/web-ui/src/pages/EditPermissionsPage.jsx
+++ b/web-ui/src/pages/EditPermissionsPage.jsx
@@ -3,10 +3,15 @@ import React, { useEffect, useContext, useState } from "react";
import EditPermissionsPageRoles from "./EditPermissionsPageRoles";
import { getPermissionsList } from "../api/permissions";
-import { getRolePermissionsList } from "../api/rolepermissions";
+import {
+ getRolePermissionsList,
+ postRolePermissionsList,
+} from "../api/rolepermissions";
import { getMemberRolesList } from "../api/memberroles";
import { isArrayPresent, filterObjectByValOrKey } from "../helpers/checks";
+import { UPDATE_TOAST } from "../context/actions";
+
import { AppContext } from "../context/AppContext";
// import { selectPermissions } from "../context/selectors";
import { selectCurrentUserId } from "../context/selectors";
@@ -160,11 +165,42 @@ const EditPermissionsPage = (props) => {
const [viewCheckinsPDL, setViewCheckinsPDL] = useState(false);
const [viewCheckinsMember, setViewCheckinsMember] = useState(false);
- const handleClickCreateFeedbackRequestAdmin = () =>
+ const changeRolePermission = async (roleId, permissionId) => {
+ let newSchema = { roleId: roleId, permissionId: permissionId };
+ let res = await postRolePermissionsList(newSchema, csrf);
+ let data =
+ res.payload && res.payload.data && !res.error ? res.payload.data : null;
+ if (data) {
+ // dispatch({
+ // type: UPDATE_ROLE_PERMISSION,
+ // payload: data,
+ // });
+ window.snackDispatch({
+ type: UPDATE_TOAST,
+ payload: {
+ severity: "success",
+ toast: `Permission added to Role`,
+ },
+ });
+ } else {
+ console.log(res?.error);
+ window.snackDispatch({
+ type: UPDATE_TOAST,
+ payload: {
+ severity: "warning",
+ toast: `Problem changing permission for that role`,
+ },
+ });
+ }
+ };
+
+ const handleClickCreateFeedbackRequestAdmin = ({roleId, permissionId}) => {
+ // {"roleId": "e8a4fff8-e984-4e59-be84-a713c9fa8d23", "permissionId": "439ad8a8-500f-4f3f-963b-a86437d5820a"}
+ changeRolePermission(roleId, permissionId);
setCreateFeedbackRequestPermissionsAdmin(
!createFeedbackRequestPermissionsAdmin
);
-
+ };
const handleClickCreateFeedbackRequestPDL = () =>
setCreateFeedbackRequestPermissionsPDL(
!createFeedbackRequestPermissionsPDL
@@ -347,7 +383,7 @@ const EditPermissionsPage = (props) => {
doTask1();
doTask2();
doTask3();
- }
+ }
}, [csrf]);
// useEffect(() => {
From f88993f18843e8401aba872ef36b87480a869c42 Mon Sep 17 00:00:00 2001
From: S78901 <39834839+S78901@users.noreply.github.com>
Date: Wed, 6 Mar 2024 01:07:05 -0600
Subject: [PATCH 21/37] [2064] Fix achieved, api error?
---
web-ui/src/api/rolepermissions.js | 9 ++++++
web-ui/src/pages/EditPermissionsPage.jsx | 41 ++++++++++++++++++++----
2 files changed, 44 insertions(+), 6 deletions(-)
diff --git a/web-ui/src/api/rolepermissions.js b/web-ui/src/api/rolepermissions.js
index 8353dd278f..3ddcaccb96 100644
--- a/web-ui/src/api/rolepermissions.js
+++ b/web-ui/src/api/rolepermissions.js
@@ -19,3 +19,12 @@ export const postRolePermissionsList = async (roleData, cookie) => {
headers: { "X-CSRF-Header": cookie },
});
};
+
+export const deleteRolePermissionsList = async (roleData, cookie) => {
+ return resolve({
+ method: "delete",
+ url: rolePermissionsListUrl,
+ responseType: "json",
+ headers: { "X-CSRF-Header": cookie },
+ });
+};
\ No newline at end of file
diff --git a/web-ui/src/pages/EditPermissionsPage.jsx b/web-ui/src/pages/EditPermissionsPage.jsx
index 4a07694280..f844022f8b 100644
--- a/web-ui/src/pages/EditPermissionsPage.jsx
+++ b/web-ui/src/pages/EditPermissionsPage.jsx
@@ -6,6 +6,7 @@ import { getPermissionsList } from "../api/permissions";
import {
getRolePermissionsList,
postRolePermissionsList,
+ deleteRolePermissionsList
} from "../api/rolepermissions";
import { getMemberRolesList } from "../api/memberroles";
import { isArrayPresent, filterObjectByValOrKey } from "../helpers/checks";
@@ -171,10 +172,6 @@ const EditPermissionsPage = (props) => {
let data =
res.payload && res.payload.data && !res.error ? res.payload.data : null;
if (data) {
- // dispatch({
- // type: UPDATE_ROLE_PERMISSION,
- // payload: data,
- // });
window.snackDispatch({
type: UPDATE_TOAST,
payload: {
@@ -194,11 +191,43 @@ const EditPermissionsPage = (props) => {
}
};
+ const deleteRolePermission = async (roleId, permissionId) => {
+ let newSchema = { roleId: roleId, permissionId: permissionId };
+ let res = await deleteRolePermissionsList(newSchema, csrf);
+ let data = !res.error ? "Success" : null;
+ if (data) {
+ window.snackDispatch({
+ type: UPDATE_TOAST,
+ payload: {
+ severity: "success",
+ toast: `Permission removed from Role`,
+ },
+ });
+ } else {
+ console.log(res?.error);
+ window.snackDispatch({
+ type: UPDATE_TOAST,
+ payload: {
+ severity: "warning",
+ toast: `Problem deleting permission for that role`,
+ },
+ });
+ }
+ };
+
const handleClickCreateFeedbackRequestAdmin = ({roleId, permissionId}) => {
+ let currentBool = !createFeedbackRequestPermissionsAdmin;
+ if (currentBool) {
+ console.log("Execute bool");
+ changeRolePermission("e8a4fff8-e984-4e59-be84-a713c9fa8d23", "439ad8a8-500f-4f3f-963b-a86437d5820a")
+ } else {
+ console.log("Post bool");
+ deleteRolePermission("e8a4fff8-e984-4e59-be84-a713c9fa8d23", "439ad8a8-500f-4f3f-963b-a86437d5820a");
+ }
// {"roleId": "e8a4fff8-e984-4e59-be84-a713c9fa8d23", "permissionId": "439ad8a8-500f-4f3f-963b-a86437d5820a"}
- changeRolePermission(roleId, permissionId);
+ changeRolePermission("e8a4fff8-e984-4e59-be84-a713c9fa8d23", "439ad8a8-500f-4f3f-963b-a86437d5820a");
setCreateFeedbackRequestPermissionsAdmin(
- !createFeedbackRequestPermissionsAdmin
+ !currentBool
);
};
const handleClickCreateFeedbackRequestPDL = () =>
From 57d2166837d9130ea0f6215d2e171a1688642fb1 Mon Sep 17 00:00:00 2001
From: S78901 <39834839+S78901@users.noreply.github.com>
Date: Wed, 6 Mar 2024 09:37:22 -0600
Subject: [PATCH 22/37] [2064] Small adjustment
---
web-ui/src/pages/EditPermissionsPage.jsx | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/web-ui/src/pages/EditPermissionsPage.jsx b/web-ui/src/pages/EditPermissionsPage.jsx
index f844022f8b..a3d17ce3ec 100644
--- a/web-ui/src/pages/EditPermissionsPage.jsx
+++ b/web-ui/src/pages/EditPermissionsPage.jsx
@@ -216,18 +216,17 @@ const EditPermissionsPage = (props) => {
};
const handleClickCreateFeedbackRequestAdmin = ({roleId, permissionId}) => {
- let currentBool = !createFeedbackRequestPermissionsAdmin;
- if (currentBool) {
- console.log("Execute bool");
+ if (!createFeedbackRequestPermissionsAdmin) {
+ console.log("Change role");
changeRolePermission("e8a4fff8-e984-4e59-be84-a713c9fa8d23", "439ad8a8-500f-4f3f-963b-a86437d5820a")
} else {
- console.log("Post bool");
+ console.log("Delete role");
deleteRolePermission("e8a4fff8-e984-4e59-be84-a713c9fa8d23", "439ad8a8-500f-4f3f-963b-a86437d5820a");
}
// {"roleId": "e8a4fff8-e984-4e59-be84-a713c9fa8d23", "permissionId": "439ad8a8-500f-4f3f-963b-a86437d5820a"}
changeRolePermission("e8a4fff8-e984-4e59-be84-a713c9fa8d23", "439ad8a8-500f-4f3f-963b-a86437d5820a");
setCreateFeedbackRequestPermissionsAdmin(
- !currentBool
+ !createFeedbackRequestPermissionsAdmin
);
};
const handleClickCreateFeedbackRequestPDL = () =>
From 297d35c76602730583002b379f5cc5a1df958838 Mon Sep 17 00:00:00 2001
From: S78901 <39834839+S78901@users.noreply.github.com>
Date: Wed, 6 Mar 2024 09:53:58 -0600
Subject: [PATCH 23/37] [2064] Adjustment
---
web-ui/src/api/rolepermissions.js | 2 +-
web-ui/src/pages/EditPermissionsPage.jsx | 3 +--
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/web-ui/src/api/rolepermissions.js b/web-ui/src/api/rolepermissions.js
index 3ddcaccb96..4b801bc214 100644
--- a/web-ui/src/api/rolepermissions.js
+++ b/web-ui/src/api/rolepermissions.js
@@ -20,7 +20,7 @@ export const postRolePermissionsList = async (roleData, cookie) => {
});
};
-export const deleteRolePermissionsList = async (roleData, cookie) => {
+export const deleteRolePermissionsList = async (cookie) => {
return resolve({
method: "delete",
url: rolePermissionsListUrl,
diff --git a/web-ui/src/pages/EditPermissionsPage.jsx b/web-ui/src/pages/EditPermissionsPage.jsx
index a3d17ce3ec..5f581ab70d 100644
--- a/web-ui/src/pages/EditPermissionsPage.jsx
+++ b/web-ui/src/pages/EditPermissionsPage.jsx
@@ -215,7 +215,7 @@ const EditPermissionsPage = (props) => {
}
};
- const handleClickCreateFeedbackRequestAdmin = ({roleId, permissionId}) => {
+ const handleClickCreateFeedbackRequestAdmin = () => {
if (!createFeedbackRequestPermissionsAdmin) {
console.log("Change role");
changeRolePermission("e8a4fff8-e984-4e59-be84-a713c9fa8d23", "439ad8a8-500f-4f3f-963b-a86437d5820a")
@@ -224,7 +224,6 @@ const EditPermissionsPage = (props) => {
deleteRolePermission("e8a4fff8-e984-4e59-be84-a713c9fa8d23", "439ad8a8-500f-4f3f-963b-a86437d5820a");
}
// {"roleId": "e8a4fff8-e984-4e59-be84-a713c9fa8d23", "permissionId": "439ad8a8-500f-4f3f-963b-a86437d5820a"}
- changeRolePermission("e8a4fff8-e984-4e59-be84-a713c9fa8d23", "439ad8a8-500f-4f3f-963b-a86437d5820a");
setCreateFeedbackRequestPermissionsAdmin(
!createFeedbackRequestPermissionsAdmin
);
From 27cd0dc5989ddce50535305f2f8ac4a0eb1e07a6 Mon Sep 17 00:00:00 2001
From: S78901 <39834839+S78901@users.noreply.github.com>
Date: Thu, 7 Mar 2024 09:27:17 -0600
Subject: [PATCH 24/37] [2064] Fix 'Delete' Method
---
web-ui/src/api/rolepermissions.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/web-ui/src/api/rolepermissions.js b/web-ui/src/api/rolepermissions.js
index 4b801bc214..a8cc55a1f6 100644
--- a/web-ui/src/api/rolepermissions.js
+++ b/web-ui/src/api/rolepermissions.js
@@ -20,11 +20,12 @@ export const postRolePermissionsList = async (roleData, cookie) => {
});
};
-export const deleteRolePermissionsList = async (cookie) => {
+export const deleteRolePermissionsList = async (roleData, cookie) => {
return resolve({
method: "delete",
url: rolePermissionsListUrl,
responseType: "json",
+ data: roleData,
headers: { "X-CSRF-Header": cookie },
});
};
\ No newline at end of file
From d00aba67220d4f97cb43ef65ca425321e0aaf044 Mon Sep 17 00:00:00 2001
From: S78901 <39834839+S78901@users.noreply.github.com>
Date: Mon, 11 Mar 2024 07:27:34 -0500
Subject: [PATCH 25/37] [2064] Dynamic ID lookup for roles and permissions id's
---
web-ui/src/pages/EditPermissionsPage.jsx | 260 +++++++++++++++++++----
1 file changed, 219 insertions(+), 41 deletions(-)
diff --git a/web-ui/src/pages/EditPermissionsPage.jsx b/web-ui/src/pages/EditPermissionsPage.jsx
index 5f581ab70d..580ae51077 100644
--- a/web-ui/src/pages/EditPermissionsPage.jsx
+++ b/web-ui/src/pages/EditPermissionsPage.jsx
@@ -6,7 +6,7 @@ import { getPermissionsList } from "../api/permissions";
import {
getRolePermissionsList,
postRolePermissionsList,
- deleteRolePermissionsList
+ deleteRolePermissionsList,
} from "../api/rolepermissions";
import { getMemberRolesList } from "../api/memberroles";
import { isArrayPresent, filterObjectByValOrKey } from "../helpers/checks";
@@ -20,10 +20,12 @@ import { selectCurrentUserId } from "../context/selectors";
import "./EditPermissionsPage.css";
const EditPermissionsPage = (props) => {
- // const { state, dispatch } = useContext(AppContext);
const { state } = useContext(AppContext);
const { csrf } = state;
const [permissionsList, setPermissionsList] = useState([]);
+ const [adminId, setAdminId] = useState("");
+ const [pdlId, setPDLId] = useState("");
+ const [memberId, setMemberId] = useState("");
const [rolePermissionsList, setRolePermissionsList] = useState([]);
const currentUserId = selectCurrentUserId(state);
const [currentUserRole, setCurrentUserRole] = useState("");
@@ -35,6 +37,36 @@ const EditPermissionsPage = (props) => {
const [pdlPermissionsList, setPDLPermissionsList] = useState([]);
const [memberPermissionsList, setMemberPermissionsList] = useState([]);
+ const [
+ createFeedbackRequestPermissionsId,
+ setCreateFeedbackRequestPermissionsId,
+ ] = useState("");
+ const [
+ deleteFeedbackRequestPermissionsId,
+ setDeleteFeedbackRequestPermissionsId,
+ ] = useState("");
+ const [
+ viewFeedbackRequestPermissionsId,
+ setViewFeedbackRequestPermissionsId,
+ ] = useState("");
+ const [viewFeedbackAnswerPermissionsId, setViewFeedbackAnswerPermissionsId] =
+ useState("");
+ const [createOrgMembersPermissionsId, setCreateOrgMembersPermissionsId] =
+ useState("");
+ const [deleteOrgMembersPermissionsId, setDeleteOrgMembersPermissionsId] =
+ useState("");
+ const [viewRolePermissionsId, setViewRolePermissionsId] = useState("");
+ const [assignRolePermissionsId, setAssignRolePermissionsId] = useState("");
+ const [viewPermissionsId, setViewPermissionsId] = useState("");
+ const [viewSkillsReportsId, setViewSkillsReportsId] = useState("");
+ const [viewRetentionReportsId, setViewRetentionReportsId] = useState("");
+ const [viewAnniversaryReportsId, setViewAnniversaryReportsId] = useState("");
+ const [viewBirthdayReportsId, setViewBirthdayReportsId] = useState("");
+ const [viewProfileReportsId, setViewProfileReportsId] = useState("");
+ const [updateCheckinsId, setUpdateCheckinsId] = useState("");
+ const [createCheckinsId, setCreateCheckinsId] = useState("");
+ const [viewCheckinsId, setViewCheckinsId] = useState("");
+
const [
createFeedbackRequestPermissionsAdmin,
setCreateFeedbackRequestPermissionsAdmin,
@@ -217,50 +249,95 @@ const EditPermissionsPage = (props) => {
const handleClickCreateFeedbackRequestAdmin = () => {
if (!createFeedbackRequestPermissionsAdmin) {
- console.log("Change role");
- changeRolePermission("e8a4fff8-e984-4e59-be84-a713c9fa8d23", "439ad8a8-500f-4f3f-963b-a86437d5820a")
+ changeRolePermission(adminId, createFeedbackRequestPermissionsId);
} else {
- console.log("Delete role");
- deleteRolePermission("e8a4fff8-e984-4e59-be84-a713c9fa8d23", "439ad8a8-500f-4f3f-963b-a86437d5820a");
+ deleteRolePermission(adminId, createFeedbackRequestPermissionsId);
}
- // {"roleId": "e8a4fff8-e984-4e59-be84-a713c9fa8d23", "permissionId": "439ad8a8-500f-4f3f-963b-a86437d5820a"}
setCreateFeedbackRequestPermissionsAdmin(
!createFeedbackRequestPermissionsAdmin
);
};
- const handleClickCreateFeedbackRequestPDL = () =>
+ const handleClickCreateFeedbackRequestPDL = () => {
+ if (!createFeedbackRequestPermissionsPDL) {
+ changeRolePermission(pdlId, createFeedbackRequestPermissionsId);
+ } else {
+ deleteRolePermission(pdlId, createFeedbackRequestPermissionsId);
+ }
setCreateFeedbackRequestPermissionsPDL(
!createFeedbackRequestPermissionsPDL
);
+ };
- const handleClickCreateFeedbackRequestMember = () =>
+ const handleClickCreateFeedbackRequestMember = () => {
+ if (!createFeedbackRequestPermissionsMember) {
+ changeRolePermission(memberId, createFeedbackRequestPermissionsId);
+ } else {
+ deleteRolePermission(memberId, createFeedbackRequestPermissionsId);
+ }
setCreateFeedbackRequestPermissionsMember(
!createFeedbackRequestPermissionsMember
);
+ };
- const handleClickDeleteFeedbackRequestAdmin = () =>
+ const handleClickDeleteFeedbackRequestAdmin = () => {
+ if (!deleteFeedbackRequestPermissionsAdmin) {
+ changeRolePermission(adminId, deleteFeedbackRequestPermissionsId);
+ } else {
+ deleteRolePermission(adminId, deleteFeedbackRequestPermissionsId);
+ }
setDeleteFeedbackRequestPermissionsAdmin(
!deleteFeedbackRequestPermissionsAdmin
);
- const handleClickDeleteFeedbackRequestPDL = () =>
+ };
+ const handleClickDeleteFeedbackRequestPDL = () => {
+ if (!deleteFeedbackRequestPermissionsPDL) {
+ changeRolePermission(pdlId, deleteFeedbackRequestPermissionsId);
+ } else {
+ deleteRolePermission(pdlId, deleteFeedbackRequestPermissionsId);
+ }
setDeleteFeedbackRequestPermissionsPDL(
!deleteFeedbackRequestPermissionsPDL
);
- const handleClickDeleteFeedbackRequestMember = () =>
+ };
+ const handleClickDeleteFeedbackRequestMember = () => {
+ if (!deleteFeedbackRequestPermissionsMember) {
+ changeRolePermission(memberId, deleteFeedbackRequestPermissionsId);
+ } else {
+ deleteRolePermission(memberId, deleteFeedbackRequestPermissionsId);
+ }
setDeleteFeedbackRequestPermissionsMember(
!deleteFeedbackRequestPermissionsMember
);
+ };
- const handleClickViewFeedbackRequestAdmin = () =>
+ const handleClickViewFeedbackRequestAdmin = () => {
+ if (!viewFeedbackRequestPermissionsAdmin) {
+ changeRolePermission(adminId, viewFeedbackRequestPermissionsId);
+ } else {
+ deleteRolePermission(adminId, viewFeedbackRequestPermissionsId);
+ }
setViewFeedbackRequestPermissionsAdmin(
!viewFeedbackRequestPermissionsAdmin
);
- const handleClickViewFeedbackRequestPDL = () =>
+ };
+ const handleClickViewFeedbackRequestPDL = () => {
+ if (!viewFeedbackRequestPermissionsAdmin) {
+ changeRolePermission(pdlId, viewFeedbackRequestPermissionsId);
+ } else {
+ deleteRolePermission(pdlId, viewFeedbackRequestPermissionsId);
+ }
setViewFeedbackRequestPermissionsPDL(!viewFeedbackRequestPermissionsPDL);
- const handleClickViewFeedbackRequestMember = () =>
+ };
+ const handleClickViewFeedbackRequestMember = () => {
+ if (!viewFeedbackRequestPermissionsAdmin) {
+ changeRolePermission(memberId, viewFeedbackRequestPermissionsId);
+ } else {
+ deleteRolePermission(memberId, viewFeedbackRequestPermissionsId);
+ }
setViewFeedbackRequestPermissionsMember(
!viewFeedbackRequestPermissionsMember
);
+ };
const handleClickViewFeedbackAnswerAdmin = () =>
setViewFeedbackAnswerPermissionsAdmin(!viewFeedbackAnswerPermissionsAdmin);
@@ -360,26 +437,6 @@ const EditPermissionsPage = (props) => {
const handleClickViewCheckinsMember = () =>
setViewCheckinsMember(!viewCheckinsMember);
- // const permissionTypes = [
- // 'CAN_VIEW_FEEDBACK_REQUEST',
- // 'CAN_CREATE_FEEDBACK_REQUEST',
- // 'CAN_DELETE_FEEDBACK_REQUEST',
- // 'CAN_VIEW_FEEDBACK_ANSWER',
- // 'CAN_DELETE_ORGANIZATION_MEMBERS',
- // 'CAN_CREATE_ORGANIZATION_MEMBERS',
- // 'CAN_VIEW_ROLE_PERMISSIONS',
- // 'CAN_ASSIGN_ROLE_PERMISSIONS',
- // 'CAN_VIEW_PERMISSIONS',
- // 'CAN_VIEW_SKILLS_REPORT',
- // 'CAN_VIEW_RETENTION_REPORT',
- // 'CAN_VIEW_ANNIVERSARY_REPORT',
- // 'CAN_VIEW_BIRTHDAY_REPORT',
- // 'CAN_VIEW_PROFILE_REPORT',
- // 'CAN_CREATE_CHECKINS',
- // 'CAN_VIEW_CHECKINS',
- // 'CAN_UPDATE_CHECKINS',
- // ];
-
useEffect(() => {
const doTask1 = async () => {
let res = await getRolePermissionsList(csrf);
@@ -413,12 +470,133 @@ const EditPermissionsPage = (props) => {
}
}, [csrf]);
- // useEffect(() => {
- // console.log("Role Permissions");
- // console.log(rolePermissionsList);
- // console.log("Permissions List");
- // console.log(permissionsList);
- // }, [rolePermissionsList, permissionsList]);
+ useEffect(() => {
+ if (isArrayPresent(rolePermissionsList)) {
+ let adminData = rolePermissionsList.filter((a) => a.role === "ADMIN");
+ if (isArrayPresent(adminData)) {
+ setAdminId(adminData[0].roleId);
+ }
+ let pdlData = rolePermissionsList.filter((a) => a.role === "PDL");
+ if (isArrayPresent(pdlData)) {
+ setPDLId(pdlData[0].roleId);
+ }
+ let memberData = rolePermissionsList.filter((a) => a.role === "PDL");
+ if (isArrayPresent(memberData)) {
+ setMemberId(memberData[0].roleId);
+ }
+ }
+
+ if (isArrayPresent(permissionsList)) {
+ let id1 = permissionsList.filter(
+ (a) => a.permission === "CAN_CREATE_ORGANIZATION_MEMBERS"
+ );
+ if (isArrayPresent(id1)) {
+ setCreateFeedbackRequestPermissionsId(id1[0].id);
+ }
+ let id2 = permissionsList.filter(
+ (a) => a.permission === "CAN_DELETE_ORGANIZATION_MEMBERS"
+ );
+ if (isArrayPresent(id2)) {
+ setCreateFeedbackRequestPermissionsId(id2[0].id);
+ }
+ let id3 = permissionsList.filter(
+ (a) => a.permission === "CAN_DELETE_FEEDBACK_REQUEST"
+ );
+ if (isArrayPresent(id3)) {
+ setDeleteFeedbackRequestPermissionsId(id3[0].id);
+ }
+ let id4 = permissionsList.filter(
+ (a) => a.permission === "CAN_VIEW_FEEDBACK_REQUEST"
+ );
+ if (isArrayPresent(id4)) {
+ setViewFeedbackRequestPermissionsId(id4[0].id);
+ }
+ let id5 = permissionsList.filter(
+ (a) => a.permission === "CAN_VIEW_FEEDBACK_ANSWER"
+ );
+ if (isArrayPresent(id5)) {
+ setViewFeedbackAnswerPermissionsId(id5[0].id);
+ }
+ let id6 = permissionsList.filter(
+ (a) => a.permission === "CAN_CREATE_ORGANIZATION_MEMBERS"
+ );
+ if (isArrayPresent(id6)) {
+ setCreateOrgMembersPermissionsId(id6[0].id);
+ }
+ let id7 = permissionsList.filter(
+ (a) => a.permission === "CAN_DELETE_ORGANIZATION_MEMBERS"
+ );
+ if (isArrayPresent(id7)) {
+ setDeleteOrgMembersPermissionsId(id7[0].id);
+ }
+ let id8 = permissionsList.filter(
+ (a) => a.permission === "CAN_VIEW_ROLE_PERMISSIONS"
+ );
+ if (isArrayPresent(id8)) {
+ setViewRolePermissionsId(id8[0].id);
+ }
+ let id9 = permissionsList.filter(
+ (a) => a.permission === "CAN_ASSIGN_ROLE_PERMISSIONS"
+ );
+ if (isArrayPresent(id9)) {
+ setAssignRolePermissionsId(id9[0].id);
+ }
+ let id10 = permissionsList.filter(
+ (a) => a.permission === "CAN_VIEW_PERMISSIONS"
+ );
+ if (isArrayPresent(id10)) {
+ setViewPermissionsId(id10[0].id);
+ }
+ let id11 = permissionsList.filter(
+ (a) => a.permission === "CAN_VIEW_SKILLS_REPORT"
+ );
+ if (isArrayPresent(id11)) {
+ setViewSkillsReportsId(id11[0].id);
+ }
+ let id12 = permissionsList.filter(
+ (a) => a.permission === "CAN_VIEW_RETENTION_REPORT"
+ );
+ if (isArrayPresent(id12)) {
+ setViewRetentionReportsId(id12[0].id);
+ }
+ let id13 = permissionsList.filter(
+ (a) => a.permission === "CAN_VIEW_ANNIVERSARY_REPORT"
+ );
+ if (isArrayPresent(id13)) {
+ setViewAnniversaryReportsId(id13[0].id);
+ }
+ let id14 = permissionsList.filter(
+ (a) => a.permission === "CAN_VIEW_BIRTHDAY_REPORT"
+ );
+ if (isArrayPresent(id14)) {
+ setViewBirthdayReportsId(id14[0].id);
+ }
+ let id15 = permissionsList.filter(
+ (a) => a.permission === "CAN_VIEW_PROFILE_REPORT"
+ );
+ if (isArrayPresent(id15)) {
+ setViewProfileReportsId(id15[0].id);
+ }
+ let id16 = permissionsList.filter(
+ (a) => a.permission === "CAN_UPDATE_CHECKINS"
+ );
+ if (isArrayPresent(id16)) {
+ setUpdateCheckinsId(id16[0].id);
+ }
+ let id17 = permissionsList.filter(
+ (a) => a.permission === "CAN_CREATE_CHECKINS"
+ );
+ if (isArrayPresent(id17)) {
+ setCreateCheckinsId(id17[0].id);
+ }
+ let id18 = permissionsList.filter(
+ (a) => a.permission === "CAN_VIEW_CHECKINS"
+ );
+ if (isArrayPresent(id18)) {
+ setViewCheckinsId(id18[0].id);
+ }
+ }
+ }, [rolePermissionsList, permissionsList]);
useEffect(() => {
if (isArrayPresent(memberRoles)) {
From b12100cc799f71e8fc3c4f15ad23773f70777f17 Mon Sep 17 00:00:00 2001
From: S78901 <39834839+S78901@users.noreply.github.com>
Date: Mon, 11 Mar 2024 08:39:47 -0500
Subject: [PATCH 26/37] [2064] Small fix
---
web-ui/src/pages/EditPermissionsPage.jsx | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/web-ui/src/pages/EditPermissionsPage.jsx b/web-ui/src/pages/EditPermissionsPage.jsx
index 580ae51077..266dcf11b0 100644
--- a/web-ui/src/pages/EditPermissionsPage.jsx
+++ b/web-ui/src/pages/EditPermissionsPage.jsx
@@ -321,15 +321,16 @@ const EditPermissionsPage = (props) => {
);
};
const handleClickViewFeedbackRequestPDL = () => {
- if (!viewFeedbackRequestPermissionsAdmin) {
+ if (!viewFeedbackRequestPermissionsPDL) {
changeRolePermission(pdlId, viewFeedbackRequestPermissionsId);
} else {
deleteRolePermission(pdlId, viewFeedbackRequestPermissionsId);
}
setViewFeedbackRequestPermissionsPDL(!viewFeedbackRequestPermissionsPDL);
};
+
const handleClickViewFeedbackRequestMember = () => {
- if (!viewFeedbackRequestPermissionsAdmin) {
+ if (!viewFeedbackRequestPermissionsMember) {
changeRolePermission(memberId, viewFeedbackRequestPermissionsId);
} else {
deleteRolePermission(memberId, viewFeedbackRequestPermissionsId);
From 5d710dfee64a2aa0e6c05b153eadaffd6fa17d7e Mon Sep 17 00:00:00 2001
From: S78901 <39834839+S78901@users.noreply.github.com>
Date: Mon, 11 Mar 2024 15:36:38 -0500
Subject: [PATCH 27/37] [2064] Added more sections for the API
---
web-ui/src/pages/EditPermissionsPage.jsx | 48 +++++++++++++++++++++---
1 file changed, 42 insertions(+), 6 deletions(-)
diff --git a/web-ui/src/pages/EditPermissionsPage.jsx b/web-ui/src/pages/EditPermissionsPage.jsx
index 266dcf11b0..5fa7bcdc82 100644
--- a/web-ui/src/pages/EditPermissionsPage.jsx
+++ b/web-ui/src/pages/EditPermissionsPage.jsx
@@ -340,21 +340,57 @@ const EditPermissionsPage = (props) => {
);
};
- const handleClickViewFeedbackAnswerAdmin = () =>
+ const handleClickViewFeedbackAnswerAdmin = () => {
+ if (!viewFeedbackAnswerPermissionsAdmin) {
+ changeRolePermission(adminId, viewFeedbackAnswerPermissionsId);
+ } else {
+ deleteRolePermission(adminId, viewFeedbackAnswerPermissionsId);
+ }
setViewFeedbackAnswerPermissionsAdmin(!viewFeedbackAnswerPermissionsAdmin);
- const handleClickViewFeedbackAnswerPDL = () =>
+ };
+ const handleClickViewFeedbackAnswerPDL = () => {
+ if (!viewFeedbackAnswerPermissionsPDL) {
+ changeRolePermission(pdlId, viewFeedbackAnswerPermissionsId);
+ } else {
+ deleteRolePermission(pdlId, viewFeedbackAnswerPermissionsId);
+ }
setViewFeedbackAnswerPermissionsPDL(!viewFeedbackAnswerPermissionsPDL);
- const handleClickViewFeedbackAnswerMember = () =>
+ };
+ const handleClickViewFeedbackAnswerMember = () => {
+ if (!viewFeedbackAnswerPermissionsMember) {
+ changeRolePermission(memberId, viewFeedbackAnswerPermissionsId);
+ } else {
+ deleteRolePermission(memberId, viewFeedbackAnswerPermissionsId);
+ }
setViewFeedbackAnswerPermissionsMember(
!viewFeedbackAnswerPermissionsMember
);
+ };
- const handleClickCreateOrgMembersPermissionsAdmin = () =>
+ const handleClickCreateOrgMembersPermissionsAdmin = () => {
+ if (!createOrgMembersPermissionsAdmin) {
+ changeRolePermission(adminId, createOrgMembersPermissionsId);
+ } else {
+ deleteRolePermission(adminId, createOrgMembersPermissionsId);
+ }
setCreateOrgMembersPermissionsAdmin(!createOrgMembersPermissionsAdmin);
- const handleClickCreateOrgMembersPermissionsPDL = () =>
+ };
+ const handleClickCreateOrgMembersPermissionsPDL = () => {
+ if (!createOrgMembersPermissionsPDL) {
+ changeRolePermission(pdlId, createOrgMembersPermissionsId);
+ } else {
+ deleteRolePermission(pdlId, createOrgMembersPermissionsId);
+ }
setCreateOrgMembersPermissionsPDL(!createOrgMembersPermissionsPDL);
- const handleClickCreateOrgMembersPermissionsMember = () =>
+ };
+ const handleClickCreateOrgMembersPermissionsMember = () => {
+ if (!createOrgMembersPermissionsMember) {
+ changeRolePermission(memberId, createOrgMembersPermissionsId);
+ } else {
+ deleteRolePermission(memberId, createOrgMembersPermissionsId);
+ }
setCreateOrgMembersPermissionsMember(!createOrgMembersPermissionsMember);
+ };
const handleClickDeleteOrgMembersPermissionsAdmin = () =>
setDeleteOrgMembersPermissionsAdmin(!deleteOrgMembersPermissionsAdmin);
From 5b4113a0272cfe4520f8b778b783689a0888a6c7 Mon Sep 17 00:00:00 2001
From: S78901 <39834839+S78901@users.noreply.github.com>
Date: Wed, 13 Mar 2024 23:38:55 -0500
Subject: [PATCH 28/37] [2064] Finishing up api calls
---
web-ui/src/pages/EditPermissionsPage.jsx | 290 ++++++++++++++++++++---
1 file changed, 254 insertions(+), 36 deletions(-)
diff --git a/web-ui/src/pages/EditPermissionsPage.jsx b/web-ui/src/pages/EditPermissionsPage.jsx
index 5fa7bcdc82..7d5c0b135d 100644
--- a/web-ui/src/pages/EditPermissionsPage.jsx
+++ b/web-ui/src/pages/EditPermissionsPage.jsx
@@ -392,87 +392,305 @@ const EditPermissionsPage = (props) => {
setCreateOrgMembersPermissionsMember(!createOrgMembersPermissionsMember);
};
- const handleClickDeleteOrgMembersPermissionsAdmin = () =>
+ const handleClickDeleteOrgMembersPermissionsAdmin = () => {
+ if (!deleteOrgMembersPermissionsAdmin) {
+ changeRolePermission(adminId, deleteOrgMembersPermissionsId);
+ } else {
+ deleteRolePermission(adminId, deleteOrgMembersPermissionsId);
+ }
setDeleteOrgMembersPermissionsAdmin(!deleteOrgMembersPermissionsAdmin);
- const handleClickDeleteOrgMembersPermissionsPDL = () =>
+ };
+ const handleClickDeleteOrgMembersPermissionsPDL = () => {
+ if (!deleteOrgMembersPermissionsPDL) {
+ changeRolePermission(pdlId, deleteOrgMembersPermissionsId);
+ } else {
+ deleteRolePermission(pdlId, deleteOrgMembersPermissionsId);
+ }
setDeleteOrgMembersPermissionsPDL(!deleteOrgMembersPermissionsPDL);
- const handleClickDeleteOrgMembersPermissionsMember = () =>
+ };
+ const handleClickDeleteOrgMembersPermissionsMember = () => {
+ if (!deleteOrgMembersPermissionsMember) {
+ changeRolePermission(memberId, deleteOrgMembersPermissionsId);
+ } else {
+ deleteRolePermission(memberId, deleteOrgMembersPermissionsId);
+ }
setDeleteOrgMembersPermissionsMember(!deleteOrgMembersPermissionsMember);
+ };
- const handleClickRolePermissionsViewAdmin = () =>
+ const handleClickRolePermissionsViewAdmin = () => {
+ if (!viewRolePermissionsAdmin) {
+ changeRolePermission(adminId, viewRolePermissionsId);
+ } else {
+ deleteRolePermission(adminId, viewRolePermissionsId);
+ }
setViewRolePermissionsAdmin(!viewRolePermissionsAdmin);
- const handleClickRolePermissionsViewPDL = () =>
+ };
+ const handleClickRolePermissionsViewPDL = () => {
+ if (!viewRolePermissionsPDL) {
+ changeRolePermission(pdlId, viewRolePermissionsId);
+ } else {
+ deleteRolePermission(pdlId, viewRolePermissionsId);
+ }
setViewRolePermissionsPDL(!viewRolePermissionsPDL);
- const handleClickRolePermissionsViewMember = () =>
+ };
+ const handleClickRolePermissionsViewMember = () => {
+ if (!viewRolePermissionsMember) {
+ changeRolePermission(memberId, viewRolePermissionsId);
+ } else {
+ deleteRolePermission(memberId, viewRolePermissionsId);
+ }
setViewRolePermissionsMember(!viewRolePermissionsMember);
+ };
- const handleClickRolePermissionsAssignAdmin = () =>
+ const handleClickRolePermissionsAssignAdmin = () => {
+ if (!assignRolePermissionsAdmin) {
+ changeRolePermission(adminId, assignRolePermissionsId);
+ } else {
+ deleteRolePermission(adminId, assignRolePermissionsId);
+ }
setAssignRolePermissionsAdmin(!assignRolePermissionsAdmin);
- const handleClickRolePermissionsAssignPDL = () =>
+ };
+ const handleClickRolePermissionsAssignPDL = () => {
+ if (!assignRolePermissionsPDL) {
+ changeRolePermission(pdlId, assignRolePermissionsId);
+ } else {
+ deleteRolePermission(pdlId, assignRolePermissionsId);
+ }
setAssignRolePermissionsPDL(!assignRolePermissionsPDL);
- const handleClickRolePermissionsAssignMember = () =>
+ };
+ const handleClickRolePermissionsAssignMember = () => {
+ if (!assignRolePermissionsMember) {
+ changeRolePermission(memberId, assignRolePermissionsId);
+ } else {
+ deleteRolePermission(memberId, assignRolePermissionsId);
+ }
setAssignRolePermissionsMember(!assignRolePermissionsMember);
+ };
- const handleClickViewAdmin = () =>
+ const handleClickViewAdmin = () => {
+ if (!viewPermissionsAdmin) {
+ changeRolePermission(adminId, viewPermissionsId);
+ } else {
+ deleteRolePermission(adminId, viewPermissionsId);
+ }
setViewPermissionsAdmin(!viewPermissionsAdmin);
- const handleClickViewPDL = () => setViewPermissionsPDL(!viewPermissionsPDL);
- const handleClickViewMember = () =>
+ };
+ const handleClickViewPDL = () => {
+ if (!viewPermissionsPDL) {
+ changeRolePermission(pdlId, viewPermissionsId);
+ } else {
+ deleteRolePermission(pdlId, viewPermissionsId);
+ }
+ setViewPermissionsPDL(!viewPermissionsPDL);
+ };
+ const handleClickViewMember = () => {
+ if (!viewPermissionsMember) {
+ changeRolePermission(memberId, viewPermissionsId);
+ } else {
+ deleteRolePermission(memberId, viewPermissionsId);
+ }
setViewPermissionsMember(!viewPermissionsMember);
+ };
- const handleClickViewSkillsReportsAdmin = () =>
+ const handleClickViewSkillsReportsAdmin = () => {
+ if (!viewSkillsReportsAdmin) {
+ changeRolePermission(adminId, viewSkillsReportsId);
+ } else {
+ deleteRolePermission(adminId, viewSkillsReportsId);
+ }
setViewSkillsReportsAdmin(!viewSkillsReportsAdmin);
- const handleClickViewSkillsReportsPDL = () =>
+ };
+ const handleClickViewSkillsReportsPDL = () => {
+ if (!viewSkillsReportsPDL) {
+ changeRolePermission(pdlId, viewSkillsReportsId);
+ } else {
+ deleteRolePermission(pdlId, viewSkillsReportsId);
+ }
setViewSkillsReportsPDL(!viewSkillsReportsPDL);
- const handleClickViewSkillsReportsMember = () =>
+ };
+ const handleClickViewSkillsReportsMember = () => {
+ if (!viewSkillsReportsMember) {
+ changeRolePermission(memberId, viewSkillsReportsId);
+ } else {
+ deleteRolePermission(memberId, viewSkillsReportsId);
+ }
setViewSkillsReportsMember(!viewSkillsReportsMember);
+ };
- const handleClickViewRetentionReportsAdmin = () =>
+ const handleClickViewRetentionReportsAdmin = () => {
+ if (!viewRetentionReportsAdmin) {
+ changeRolePermission(adminId, viewRetentionReportsId);
+ } else {
+ deleteRolePermission(adminId, viewRetentionReportsId);
+ }
setViewRetentionReportsAdmin(!viewRetentionReportsAdmin);
- const handleClickViewRetentionReportsPDL = () =>
+ };
+ const handleClickViewRetentionReportsPDL = () => {
+ if (!viewRetentionReportsPDL) {
+ changeRolePermission(pdlId, viewRetentionReportsId);
+ } else {
+ deleteRolePermission(pdlId, viewRetentionReportsId);
+ }
setViewRetentionReportsPDL(!viewRetentionReportsPDL);
- const handleClickViewRetentionReportsMember = () =>
+ };
+ const handleClickViewRetentionReportsMember = () => {
+ if (!viewRetentionReportsMember) {
+ changeRolePermission(memberId, viewRetentionReportsId);
+ } else {
+ deleteRolePermission(memberId, viewRetentionReportsId);
+ }
setViewRetentionReportsMember(!viewRetentionReportsMember);
+ };
- const handleClickViewAnniversaryReportsAdmin = () =>
+ const handleClickViewAnniversaryReportsAdmin = () => {
+ if (!viewAnniversaryReportsAdmin) {
+ changeRolePermission(adminId, viewAnniversaryReportsId);
+ } else {
+ deleteRolePermission(adminId, viewAnniversaryReportsId);
+ }
setViewAnniversaryReportsAdmin(!viewAnniversaryReportsAdmin);
- const handleClickViewAnniversaryReportsPDL = () =>
+ };
+ const handleClickViewAnniversaryReportsPDL = () => {
+ if (!viewAnniversaryReportsPDL) {
+ changeRolePermission(pdlId, viewAnniversaryReportsId);
+ } else {
+ deleteRolePermission(pdlId, viewAnniversaryReportsId);
+ }
setViewAnniversaryReportsPDL(!viewAnniversaryReportsPDL);
- const handleClickViewAnniversaryReportsMember = () =>
+ };
+ const handleClickViewAnniversaryReportsMember = () => {
+ if (!viewAnniversaryReportsMember) {
+ changeRolePermission(memberId, viewAnniversaryReportsId);
+ } else {
+ deleteRolePermission(memberId, viewAnniversaryReportsId);
+ }
setViewAnniversaryReportsMember(!viewAnniversaryReportsMember);
+ };
- const handleClickViewBirthdayReportsAdmin = () =>
+ const handleClickViewBirthdayReportsAdmin = () => {
+ if (!viewBirthdayReportsAdmin) {
+ changeRolePermission(adminId, viewBirthdayReportsId);
+ } else {
+ deleteRolePermission(adminId, viewBirthdayReportsId);
+ }
setViewBirthdayReportsAdmin(!viewBirthdayReportsAdmin);
- const handleClickViewBirthdayReportsPDL = () =>
+ };
+ const handleClickViewBirthdayReportsPDL = () => {
+ if (!viewBirthdayReportsPDL) {
+ changeRolePermission(pdlId, viewBirthdayReportsId);
+ } else {
+ deleteRolePermission(pdlId, viewBirthdayReportsId);
+ }
setViewBirthdayReportsPDL(!viewBirthdayReportsPDL);
- const handleClickViewBirthdayReportsMember = () =>
+ };
+ const handleClickViewBirthdayReportsMember = () => {
+ if (!viewBirthdayReportsMember) {
+ changeRolePermission(memberId, viewBirthdayReportsId);
+ } else {
+ deleteRolePermission(memberId, viewBirthdayReportsId);
+ }
setViewBirthdayReportsMember(!viewBirthdayReportsMember);
+ };
- const handleClickViewProfileReportsAdmin = () =>
+ const handleClickViewProfileReportsAdmin = () => {
+ if (!viewProfileReportsAdmin) {
+ changeRolePermission(adminId, viewProfileReportsId);
+ } else {
+ deleteRolePermission(adminId, viewProfileReportsId);
+ }
setViewProfileReportsAdmin(!viewProfileReportsAdmin);
- const handleClickViewProfileReportsPDL = () =>
+ };
+ const handleClickViewProfileReportsPDL = () => {
+ if (!viewProfileReportsPDL) {
+ changeRolePermission(pdlId, viewProfileReportsId);
+ } else {
+ deleteRolePermission(pdlId, viewProfileReportsId);
+ }
setViewProfileReportsPDL(!viewProfileReportsPDL);
- const handleClickViewProfileReportsMember = () =>
+ };
+ const handleClickViewProfileReportsMember = () => {
+ if (!viewProfileReportsMember) {
+ changeRolePermission(memberId, viewProfileReportsMember);
+ } else {
+ deleteRolePermission(memberId, viewProfileReportsMember);
+ }
setViewProfileReportsMember(!viewProfileReportsMember);
+ };
- const handleClickUpdateCheckinsAdmin = () =>
+ const handleClickUpdateCheckinsAdmin = () => {
+ if (!updateCheckinsAdmin) {
+ changeRolePermission(adminId, updateCheckinsId);
+ } else {
+ deleteRolePermission(adminId, updateCheckinsId);
+ }
setUpdateCheckinsAdmin(!updateCheckinsAdmin);
- const handleClickUpdateCheckinsPDL = () =>
+ };
+ const handleClickUpdateCheckinsPDL = () => {
+ if (!updateCheckinsPDL) {
+ changeRolePermission(pdlId, updateCheckinsId);
+ } else {
+ deleteRolePermission(pdlId, updateCheckinsId);
+ }
setUpdateCheckinsPDL(!updateCheckinsPDL);
- const handleClickUpdateCheckinsMember = () =>
+ };
+ const handleClickUpdateCheckinsMember = () => {
+ if (!updateCheckinsMember) {
+ changeRolePermission(memberId, updateCheckinsId);
+ } else {
+ deleteRolePermission(memberId, updateCheckinsId);
+ }
setUpdateCheckinsMember(!updateCheckinsMember);
+ };
- const handleClickCreateCheckinsAdmin = () =>
+ const handleClickCreateCheckinsAdmin = () => {
+ if (!createCheckinsAdmin) {
+ changeRolePermission(adminId, createCheckinsId);
+ } else {
+ deleteRolePermission(adminId, createCheckinsId);
+ }
setCreateCheckinsAdmin(!createCheckinsAdmin);
- const handleClickCreateCheckinsPDL = () =>
+ };
+ const handleClickCreateCheckinsPDL = () => {
+ if (!createCheckinsPDL) {
+ changeRolePermission(pdlId, createCheckinsId);
+ } else {
+ deleteRolePermission(pdlId, createCheckinsId);
+ }
setCreateCheckinsPDL(!createCheckinsPDL);
- const handleClickCreateCheckinsMember = () =>
+ };
+ const handleClickCreateCheckinsMember = () => {
+ if (!createCheckinsMember) {
+ changeRolePermission(memberId, createCheckinsId);
+ } else {
+ deleteRolePermission(memberId, createCheckinsId);
+ }
setCreateCheckinsMember(!createCheckinsMember);
+ };
- const handleClickViewCheckinsAdmin = () =>
+ const handleClickViewCheckinsAdmin = () => {
+ if (!viewCheckinsAdmin) {
+ changeRolePermission(adminId, viewCheckinsId);
+ } else {
+ deleteRolePermission(adminId, viewCheckinsId);
+ }
setViewCheckinsAdmin(!viewCheckinsAdmin);
- const handleClickViewCheckinsPDL = () => setViewCheckinsPDL(!viewCheckinsPDL);
- const handleClickViewCheckinsMember = () =>
+ };
+ const handleClickViewCheckinsPDL = () => {
+ if (!viewCheckinsPDL) {
+ changeRolePermission(pdlId, viewCheckinsId);
+ } else {
+ deleteRolePermission(pdlId, viewCheckinsId);
+ }
+ setViewCheckinsPDL(!viewCheckinsPDL);
+ };
+ const handleClickViewCheckinsMember = () => {
+ if (!viewCheckinsMember) {
+ changeRolePermission(memberId, viewCheckinsId);
+ } else {
+ deleteRolePermission(memberId, viewCheckinsId);
+ }
setViewCheckinsMember(!viewCheckinsMember);
+ };
useEffect(() => {
const doTask1 = async () => {
From e574aabf3bb9924527718885e2a5a8a983cd92cb Mon Sep 17 00:00:00 2001
From: S78901 <39834839+S78901@users.noreply.github.com>
Date: Thu, 14 Mar 2024 00:05:14 -0500
Subject: [PATCH 29/37] [2064] Post testing fix for nonworking calls
---
web-ui/src/pages/EditPermissionsPage.jsx | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/web-ui/src/pages/EditPermissionsPage.jsx b/web-ui/src/pages/EditPermissionsPage.jsx
index 7d5c0b135d..5352ac9d67 100644
--- a/web-ui/src/pages/EditPermissionsPage.jsx
+++ b/web-ui/src/pages/EditPermissionsPage.jsx
@@ -610,9 +610,9 @@ const EditPermissionsPage = (props) => {
};
const handleClickViewProfileReportsMember = () => {
if (!viewProfileReportsMember) {
- changeRolePermission(memberId, viewProfileReportsMember);
+ changeRolePermission(memberId, viewProfileReportsId);
} else {
- deleteRolePermission(memberId, viewProfileReportsMember);
+ deleteRolePermission(memberId, viewProfileReportsId);
}
setViewProfileReportsMember(!viewProfileReportsMember);
};
@@ -749,7 +749,7 @@ const EditPermissionsPage = (props) => {
setCreateFeedbackRequestPermissionsId(id1[0].id);
}
let id2 = permissionsList.filter(
- (a) => a.permission === "CAN_DELETE_ORGANIZATION_MEMBERS"
+ (a) => a.permission === "CAN_CREATE_FEEDBACK_REQUEST"
);
if (isArrayPresent(id2)) {
setCreateFeedbackRequestPermissionsId(id2[0].id);
From be7726ab8ba0f3396d68a782022484ac1ab93acf Mon Sep 17 00:00:00 2001
From: S78901 <39834839+S78901@users.noreply.github.com>
Date: Thu, 14 Mar 2024 00:21:38 -0500
Subject: [PATCH 30/37] [2064] Fix typo/omission
---
web-ui/src/pages/EditPermissionsPage.jsx | 16 ++--------------
1 file changed, 2 insertions(+), 14 deletions(-)
diff --git a/web-ui/src/pages/EditPermissionsPage.jsx b/web-ui/src/pages/EditPermissionsPage.jsx
index 5352ac9d67..fa731aa4ab 100644
--- a/web-ui/src/pages/EditPermissionsPage.jsx
+++ b/web-ui/src/pages/EditPermissionsPage.jsx
@@ -10,16 +10,13 @@ import {
} from "../api/rolepermissions";
import { getMemberRolesList } from "../api/memberroles";
import { isArrayPresent, filterObjectByValOrKey } from "../helpers/checks";
-
import { UPDATE_TOAST } from "../context/actions";
-
import { AppContext } from "../context/AppContext";
-// import { selectPermissions } from "../context/selectors";
import { selectCurrentUserId } from "../context/selectors";
import "./EditPermissionsPage.css";
-const EditPermissionsPage = (props) => {
+const EditPermissionsPage = () => {
const { state } = useContext(AppContext);
const { csrf } = state;
const [permissionsList, setPermissionsList] = useState([]);
@@ -735,7 +732,7 @@ const EditPermissionsPage = (props) => {
if (isArrayPresent(pdlData)) {
setPDLId(pdlData[0].roleId);
}
- let memberData = rolePermissionsList.filter((a) => a.role === "PDL");
+ let memberData = rolePermissionsList.filter((a) => a.role === "MEMBER");
if (isArrayPresent(memberData)) {
setMemberId(memberData[0].roleId);
}
@@ -864,7 +861,6 @@ const EditPermissionsPage = (props) => {
data[0].memberRoleId.roleId
);
if (isArrayPresent(role)) {
- console.log("This is role", role);
setCurrentUserRole(role[0].role);
}
}
@@ -875,11 +871,6 @@ const EditPermissionsPage = (props) => {
} else {
setIsAdminRole(false);
}
-
- console.log("Member Roles");
- console.log(memberRoles);
- console.log("Current User Role:");
- console.log(currentUserRole);
}, [memberRoles, currentUserRole, csrf, rolePermissionsList, currentUserId]);
useEffect(() => {
@@ -890,7 +881,6 @@ const EditPermissionsPage = (props) => {
);
if (isArrayPresent(adminRole)) {
setAdminPermissionsList(adminRole[0].permissions);
- console.log("This is the admin permissions list", adminPermissionsList);
}
}, [rolePermissionsList, adminPermissionsList]);
@@ -898,7 +888,6 @@ const EditPermissionsPage = (props) => {
let pdlRole = filterObjectByValOrKey(rolePermissionsList, "PDL", "role");
if (isArrayPresent(pdlRole)) {
setPDLPermissionsList(pdlRole[0].permissions);
- console.log("This is the PDL permissions list", pdlPermissionsList);
}
}, [rolePermissionsList, pdlPermissionsList]);
@@ -910,7 +899,6 @@ const EditPermissionsPage = (props) => {
);
if (isArrayPresent(memberRole)) {
setMemberPermissionsList(memberRole[0].permissions);
- console.log("This is the Member permissions list", memberPermissionsList);
}
}, [rolePermissionsList, memberPermissionsList]);
From 223a189432dfeca7fd977b342d2d6eb6d1e0def8 Mon Sep 17 00:00:00 2001
From: Michael Kimberlin
Date: Wed, 20 Mar 2024 13:54:06 -0500
Subject: [PATCH 31/37] Swag at permissions changes
---
.../security/permissions/Permissions.java | 52 ++++++++++++-------
.../services/permissions/Permission.java | 7 ++-
web-ui/src/pages/EditPermissionsPage.jsx | 20 +++++++
3 files changed, 60 insertions(+), 19 deletions(-)
diff --git a/server/src/main/java/com/objectcomputing/checkins/security/permissions/Permissions.java b/server/src/main/java/com/objectcomputing/checkins/security/permissions/Permissions.java
index 8646828415..acaea7e5a0 100644
--- a/server/src/main/java/com/objectcomputing/checkins/security/permissions/Permissions.java
+++ b/server/src/main/java/com/objectcomputing/checkins/security/permissions/Permissions.java
@@ -1,21 +1,37 @@
package com.objectcomputing.checkins.security.permissions;
public enum Permissions {
- CAN_VIEW_FEEDBACK_REQUEST,
- CAN_CREATE_FEEDBACK_REQUEST,
- CAN_DELETE_FEEDBACK_REQUEST,
- CAN_VIEW_FEEDBACK_ANSWER,
- CAN_DELETE_ORGANIZATION_MEMBERS,
- CAN_CREATE_ORGANIZATION_MEMBERS,
- CAN_VIEW_ROLE_PERMISSIONS,
- CAN_ASSIGN_ROLE_PERMISSIONS,
- CAN_VIEW_PERMISSIONS,
- CAN_VIEW_SKILLS_REPORT,
- CAN_VIEW_RETENTION_REPORT,
- CAN_VIEW_ANNIVERSARY_REPORT,
- CAN_VIEW_BIRTHDAY_REPORT,
- CAN_VIEW_PROFILE_REPORT,
- CAN_CREATE_CHECKINS,
- CAN_VIEW_CHECKINS,
- CAN_UPDATE_CHECKINS,
-}
\ No newline at end of file
+ CAN_VIEW_FEEDBACK_REQUEST("View feedback requests", "Feedback"),
+ CAN_CREATE_FEEDBACK_REQUEST("Create feedback requests", "Feedback"),
+ CAN_DELETE_FEEDBACK_REQUEST("Delete feedback requests", "Feedback"),
+ CAN_VIEW_FEEDBACK_ANSWER("View feedback answers", "Feedback"),
+ CAN_DELETE_ORGANIZATION_MEMBERS("Delete organization members", "User Management"),
+ CAN_CREATE_ORGANIZATION_MEMBERS("Create organization members", "User Management"),
+ CAN_VIEW_ROLE_PERMISSIONS("View role permissions", "Security"),
+ CAN_ASSIGN_ROLE_PERMISSIONS("Assign role permissions", "Security"),
+ CAN_VIEW_PERMISSIONS("View all permissions", "Security"),
+ CAN_VIEW_SKILLS_REPORT("View skills report", "Reporting"),
+ CAN_VIEW_RETENTION_REPORT("View retention report", "Reporting"),
+ CAN_VIEW_ANNIVERSARY_REPORT("View anniversary report", "Reporting"),
+ CAN_VIEW_BIRTHDAY_REPORT("View birthday report", "Reporting"),
+ CAN_VIEW_PROFILE_REPORT("View profile report", "Reporting"),
+ CAN_CREATE_CHECKINS("Create check-ins", "Check-ins"),
+ CAN_VIEW_CHECKINS("View check-ins", "Check-ins"),
+ CAN_UPDATE_CHECKINS("Update check-ins", "Check-ins");
+
+ private final String description;
+ private final String category;
+
+ Permissions(String description, String category) {
+ this.description = description;
+ this.category = category;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public String getCategory() {
+ return category;
+ }
+}
diff --git a/server/src/main/java/com/objectcomputing/checkins/services/permissions/Permission.java b/server/src/main/java/com/objectcomputing/checkins/services/permissions/Permission.java
index 4c42d2bb05..b7a3b59f3f 100644
--- a/server/src/main/java/com/objectcomputing/checkins/services/permissions/Permission.java
+++ b/server/src/main/java/com/objectcomputing/checkins/services/permissions/Permission.java
@@ -1,5 +1,6 @@
package com.objectcomputing.checkins.services.permissions;
+import com.objectcomputing.checkins.security.permissions.Permissions;
import io.micronaut.core.annotation.Introspected;
import io.micronaut.core.annotation.Nullable;
import io.micronaut.data.annotation.AutoPopulated;
@@ -59,13 +60,17 @@ public void setPermission(String permission) {
}
public String getDescription() {
- return description;
+ return Permissions.valueOf(permission).getDescription(); //ignoring the database for now...
}
public void setDescription(String description) {
this.description = description;
}
+ public String getCategory() {
+ return Permissions.valueOf(permission).getCategory();
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
diff --git a/web-ui/src/pages/EditPermissionsPage.jsx b/web-ui/src/pages/EditPermissionsPage.jsx
index fa731aa4ab..0d568fe573 100644
--- a/web-ui/src/pages/EditPermissionsPage.jsx
+++ b/web-ui/src/pages/EditPermissionsPage.jsx
@@ -16,10 +16,29 @@ import { selectCurrentUserId } from "../context/selectors";
import "./EditPermissionsPage.css";
+const groupPermissionsByCategory = (permissions) => permissions.reduce((categories, permission) => {
+ const category = permission.category;
+ const existingCategory = categories.find(cat => cat.category === category);
+
+ // If category exists, add permission to its permissions array
+ if (existingCategory) {
+ existingCategory.permissions.push(permission);
+ } else {
+ // Create a new category object and add it to categories
+ categories.push({
+ category,
+ permissions: [permission],
+ });
+ }
+
+ return categories;
+}, []);
+
const EditPermissionsPage = () => {
const { state } = useContext(AppContext);
const { csrf } = state;
const [permissionsList, setPermissionsList] = useState([]);
+ const [categoriesList, setCategoriesList] = useState([]);
const [adminId, setAdminId] = useState("");
const [pdlId, setPDLId] = useState("");
const [memberId, setMemberId] = useState("");
@@ -704,6 +723,7 @@ const EditPermissionsPage = () => {
res.payload && res.payload.data && !res.error ? res.payload.data : null;
if (data) {
setPermissionsList(data);
+ setCategoriesList(groupPermissionsByCategory(data));
}
};
const doTask3 = async () => {
From 407bb6acda328bd461fdeeee2ec65c35a75d0154 Mon Sep 17 00:00:00 2001
From: Michael Kimberlin
Date: Wed, 20 Mar 2024 14:05:27 -0500
Subject: [PATCH 32/37] Disable eslint rule for now
---
web-ui/src/pages/EditPermissionsPage.jsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/web-ui/src/pages/EditPermissionsPage.jsx b/web-ui/src/pages/EditPermissionsPage.jsx
index 0d568fe573..a9a729d887 100644
--- a/web-ui/src/pages/EditPermissionsPage.jsx
+++ b/web-ui/src/pages/EditPermissionsPage.jsx
@@ -38,7 +38,7 @@ const EditPermissionsPage = () => {
const { state } = useContext(AppContext);
const { csrf } = state;
const [permissionsList, setPermissionsList] = useState([]);
- const [categoriesList, setCategoriesList] = useState([]);
+ const [categoriesList, setCategoriesList] = useState([]); // eslint-disable-line no-unused-vars
const [adminId, setAdminId] = useState("");
const [pdlId, setPDLId] = useState("");
const [memberId, setMemberId] = useState("");
From 5bc6f3eeb7576212c5629dc5c76a017fcb209b7a Mon Sep 17 00:00:00 2001
From: Michael Kimberlin
Date: Wed, 20 Mar 2024 15:01:09 -0500
Subject: [PATCH 33/37] Fix permissions tests
---
.../checkins/services/permissions/Permission.java | 2 ++
.../checkins/services/fixture/PermissionFixture.java | 4 ++--
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/server/src/main/java/com/objectcomputing/checkins/services/permissions/Permission.java b/server/src/main/java/com/objectcomputing/checkins/services/permissions/Permission.java
index b7a3b59f3f..fff5e75b71 100644
--- a/server/src/main/java/com/objectcomputing/checkins/services/permissions/Permission.java
+++ b/server/src/main/java/com/objectcomputing/checkins/services/permissions/Permission.java
@@ -12,6 +12,7 @@
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
+import javax.persistence.Transient;
import javax.validation.constraints.NotBlank;
import java.util.Objects;
import java.util.UUID;
@@ -67,6 +68,7 @@ public void setDescription(String description) {
this.description = description;
}
+ @Transient
public String getCategory() {
return Permissions.valueOf(permission).getCategory();
}
diff --git a/server/src/test/java/com/objectcomputing/checkins/services/fixture/PermissionFixture.java b/server/src/test/java/com/objectcomputing/checkins/services/fixture/PermissionFixture.java
index 2549fa3e46..83a280ea24 100644
--- a/server/src/test/java/com/objectcomputing/checkins/services/fixture/PermissionFixture.java
+++ b/server/src/test/java/com/objectcomputing/checkins/services/fixture/PermissionFixture.java
@@ -55,12 +55,12 @@ public interface PermissionFixture extends RepositoryFixture, RolePermissionFixt
);
default Permission createACustomPermission(Permissions perm) {
- return getPermissionRepository().save(new Permission(null, perm.name(), null));
+ return getPermissionRepository().save(new Permission(null, perm.name(), perm.getDescription()));
}
default void saveAllPermissions() {
for(Permissions permissions : Permissions.values()) {
- getPermissionRepository().save(new Permission(null, permissions.name(), null));
+ getPermissionRepository().save(new Permission(null, permissions.name(), permissions.getDescription()));
}
}
From 7b9f480011a3e67c0400d217be1b1e483aff7a45 Mon Sep 17 00:00:00 2001
From: Michael Kimberlin
Date: Thu, 21 Mar 2024 06:58:42 -0500
Subject: [PATCH 34/37] Use dynamically loaded Permission description and
categories
---
web-ui/src/components/menu/Menu.jsx | 2 +-
web-ui/src/components/routes/Routes.jsx | 6 +-
web-ui/src/context/selectors.js | 15 +-
web-ui/src/pages/PermissionsPage.css | 7 +
web-ui/src/pages/PermissionsPage.jsx | 199 ++++++++++++++++++
web-ui/src/pages/PermissionsPage.test.js | 11 +
.../EditPermissionsPage.test.js.snap | 11 +
.../PermissionsPage.test.js.snap | 11 +
8 files changed, 249 insertions(+), 13 deletions(-)
create mode 100644 web-ui/src/pages/PermissionsPage.css
create mode 100644 web-ui/src/pages/PermissionsPage.jsx
create mode 100644 web-ui/src/pages/PermissionsPage.test.js
create mode 100644 web-ui/src/pages/__snapshots__/EditPermissionsPage.test.js.snap
create mode 100644 web-ui/src/pages/__snapshots__/PermissionsPage.test.js.snap
diff --git a/web-ui/src/components/menu/Menu.jsx b/web-ui/src/components/menu/Menu.jsx
index 5b8fb00eff..353016cf72 100644
--- a/web-ui/src/components/menu/Menu.jsx
+++ b/web-ui/src/components/menu/Menu.jsx
@@ -96,7 +96,7 @@ const Root = styled('div')(({theme}) => ({
const adminLinks = [
// ["/admin/permissions", "Permissions"],
- ["/admin/edit-permissions", "Permissions Roles"],
+ ["/admin/permissions", "Permissions"],
["/admin/roles", "Roles"],
["/admin/users", "Users"],
["/admin/email", "Send Email"],
diff --git a/web-ui/src/components/routes/Routes.jsx b/web-ui/src/components/routes/Routes.jsx
index 7c0ebd70bb..17bc78857a 100644
--- a/web-ui/src/components/routes/Routes.jsx
+++ b/web-ui/src/components/routes/Routes.jsx
@@ -7,7 +7,7 @@ import BirthdayAnniversaryReportPage from "../../pages/BirthdayAnniversaryReport
import CheckinsPage from "../../pages/CheckinsPage";
import CheckinsReportPage from "../../pages/CheckinsReportPage";
import EditSkillsPage from "../../pages/EditSkillsPage";
-import EditPermissionsPage from "../../pages/EditPermissionsPage";
+import EditPermissionsPage from "../../pages/PermissionsPage";
import GroupIcon from "@mui/icons-material/Group";
import GuildsPage from "../../pages/GuildsPage";
import Header from "../header/Header";
@@ -102,8 +102,8 @@ export default function Routes() {
-
-
+
+
diff --git a/web-ui/src/context/selectors.js b/web-ui/src/context/selectors.js
index a5e12cc78c..0bfe95e0ac 100644
--- a/web-ui/src/context/selectors.js
+++ b/web-ui/src/context/selectors.js
@@ -41,6 +41,12 @@ export const selectIsAdmin = createSelector(
userProfile && userProfile.role && userProfile.role.includes("ADMIN")
);
+export const selectHasPermissionAssignmentPermission = createSelector(
+ selectUserProfile,
+ (userProfile) =>
+ userProfile && userProfile.role && userProfile.permissions.some((p) => p?.permission?.includes("CAN_ASSIGN_ROLE_PERMISSIONS"))
+);
+
export const selectHasReportPermission = createSelector(
selectUserProfile,
(userProfile) =>
@@ -435,15 +441,6 @@ export const selectMyGuilds = createSelector(
)
);
-export const selectMyPermissions = createSelector(
- selectCurrentUserId,
- selectPermissions,
- (id, permissions) =>
- permissions?.filter((permission) =>
- permission.permissions?.some((member) => member.memberId === id)
- )
-);
-
export const selectMyTeams = createSelector(
selectCurrentUserId,
selectTeams,
diff --git a/web-ui/src/pages/PermissionsPage.css b/web-ui/src/pages/PermissionsPage.css
new file mode 100644
index 0000000000..66faa62780
--- /dev/null
+++ b/web-ui/src/pages/PermissionsPage.css
@@ -0,0 +1,7 @@
+.permissions-page {
+ margin: 2rem;
+}
+
+.permissions-list {
+ margin: 1rem;
+}
diff --git a/web-ui/src/pages/PermissionsPage.jsx b/web-ui/src/pages/PermissionsPage.jsx
new file mode 100644
index 0000000000..3c64be18cb
--- /dev/null
+++ b/web-ui/src/pages/PermissionsPage.jsx
@@ -0,0 +1,199 @@
+import React, { useEffect, useContext, useState } from "react";
+
+import { getPermissionsList } from "../api/permissions";
+import {
+ getRolePermissionsList,
+ postRolePermissionsList,
+ deleteRolePermissionsList,
+} from "../api/rolepermissions";
+import { Checkbox } from "@mui/material";
+import { UPDATE_TOAST } from "../context/actions";
+import { AppContext } from "../context/AppContext";
+import { selectRoles, selectHasPermissionAssignmentPermission } from "../context/selectors";
+
+import "./PermissionsPage.css";
+
+const groupPermissionsByCategory = (permissions) => permissions.reduce((categories, permission) => {
+ const category = permission.category;
+ const existingCategory = categories.find(cat => cat.category === category);
+
+ // If category exists, add permission to its permissions array
+ if (existingCategory) {
+ existingCategory.permissions.push(permission);
+ } else {
+ // Create a new category object and add it to categories
+ categories.push({
+ category,
+ permissions: [permission],
+ });
+ }
+
+ return categories.sort((a,b) => a.category.localeCompare(b.category));
+}, []);
+
+const PermissionEditor = ({
+ permission,
+ title,
+ enabled,
+ onChange
+}) => {
+ return (
+
+
+
+
+ );
+};
+
+const isPermissionEnabled = (rolePermissions, permission) => rolePermissions.some((current) => current.id === permission.id);
+
+const EditPermissionsPage = () => {
+ const { state } = useContext(AppContext);
+ const { csrf } = state;
+ const roles = selectRoles(state);
+ const hasPermission = selectHasPermissionAssignmentPermission(state);
+ const [selectedRole, setSelectedRole] = useState(roles && roles.find(()=>true));
+ const [categoriesList, setCategoriesList] = useState([]);
+ const [rolePermissionsList, setRolePermissionsList] = useState([]);
+ const [rolePermissions, setRolePermissions] = useState([]);
+ const [refresh, setRefresh] = useState(true);
+
+ useEffect(() => {
+ const getRolePermissions = async () => {
+ let res = await getRolePermissionsList(csrf);
+ let data =
+ res.payload && res.payload.data && !res.error ? res.payload.data : null;
+ if (data) {
+ setRolePermissionsList(data);
+ }
+ };
+ const getPermissions = async () => {
+ let res = await getPermissionsList(csrf);
+ let data =
+ res.payload && res.payload.data && !res.error ? res.payload.data : null;
+ if (data) {
+ setCategoriesList(groupPermissionsByCategory(data));
+ }
+ };
+
+ if (csrf) {
+ getPermissions();
+ getRolePermissions();
+ }
+ }, [csrf, refresh]);
+
+ useEffect(() => {
+ if(selectedRole && rolePermissionsList) {
+ const rolePermissions = rolePermissionsList.find((rolePermission) => rolePermission.roleId === selectedRole.id);
+ rolePermissions && setRolePermissions(rolePermissions?.permissions);
+ }
+
+ }, [selectedRole, rolePermissionsList]);
+
+ const handleRoleChange = (event) => {
+ setSelectedRole(roles.find((role) => role.id === event.target.value));
+ };
+
+ const addRolePermission = async (roleId, permissionId) => {
+ let newSchema = { roleId: roleId, permissionId: permissionId };
+ let res = await postRolePermissionsList(newSchema, csrf);
+ let data =
+ res.payload && res.payload.data && !res.error ? res.payload.data : null;
+ if (data) {
+ window.snackDispatch({
+ type: UPDATE_TOAST,
+ payload: {
+ severity: "success",
+ toast: `Permission added to Role`,
+ },
+ });
+ } else {
+ window.snackDispatch({
+ type: UPDATE_TOAST,
+ payload: {
+ severity: "warning",
+ toast: `Problem changing permission for that role`,
+ },
+ });
+ }
+ };
+
+ const deleteRolePermission = async (roleId, permissionId) => {
+ let newSchema = { roleId: roleId, permissionId: permissionId };
+ let res = await deleteRolePermissionsList(newSchema, csrf);
+ let data = !res.error ? "Success" : null;
+ if (data) {
+ window.snackDispatch({
+ type: UPDATE_TOAST,
+ payload: {
+ severity: "success",
+ toast: `Permission removed from Role`,
+ },
+ });
+ } else {
+ window.snackDispatch({
+ type: UPDATE_TOAST,
+ payload: {
+ severity: "warning",
+ toast: `Problem deleting permission for that role`,
+ },
+ });
+ }
+ };
+
+ const handleChange = async (event, roleId, permissionId) => {
+ if (event?.target?.checked) {
+ await addRolePermission(roleId, permissionId);
+ setRefresh(!refresh);
+ } else {
+ await deleteRolePermission(roleId, permissionId);
+ setRefresh(!refresh);
+ }
+ };
+
+ return (
+
+ { hasPermission ?
+ (
+ <>
+
+
+
+
+
+ { selectedRole && rolePermissions && categoriesList?.map((category) => (
+
+
{category?.category}:
+ { category?.permissions?.map((permission)=> (
+
handleChange(event, selectedRole?.id, permission.id, csrf)} />
+ ))
+ }
+
+ ))
+ }
+ >
+ ) : (
+
You do not have permission to view this page.
+ )}
+
+ );
+};
+
+export default EditPermissionsPage;
diff --git a/web-ui/src/pages/PermissionsPage.test.js b/web-ui/src/pages/PermissionsPage.test.js
new file mode 100644
index 0000000000..6f2cc4aabe
--- /dev/null
+++ b/web-ui/src/pages/PermissionsPage.test.js
@@ -0,0 +1,11 @@
+import React from "react";
+import PermissionsPage from "./PermissionsPage";
+import { AppContextProvider } from "../context/AppContext";
+
+it("renders correctly", () => {
+ snapshot(
+
+
+
+ );
+});
diff --git a/web-ui/src/pages/__snapshots__/EditPermissionsPage.test.js.snap b/web-ui/src/pages/__snapshots__/EditPermissionsPage.test.js.snap
new file mode 100644
index 0000000000..7e4e0c90ca
--- /dev/null
+++ b/web-ui/src/pages/__snapshots__/EditPermissionsPage.test.js.snap
@@ -0,0 +1,11 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`renders correctly 1`] = `
+
+
+ You do not have permission to view this page.
+
+
+`;
diff --git a/web-ui/src/pages/__snapshots__/PermissionsPage.test.js.snap b/web-ui/src/pages/__snapshots__/PermissionsPage.test.js.snap
new file mode 100644
index 0000000000..62bebe520c
--- /dev/null
+++ b/web-ui/src/pages/__snapshots__/PermissionsPage.test.js.snap
@@ -0,0 +1,11 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`renders correctly 1`] = `
+
+
+ You do not have permission to view this page.
+
+
+`;
From ac04b912a114544573e31ea6937f74b0e86287e1 Mon Sep 17 00:00:00 2001
From: Michael Kimberlin
Date: Thu, 21 Mar 2024 07:20:11 -0500
Subject: [PATCH 35/37] Prevent duplicate call to load permissions
---
web-ui/src/pages/PermissionsPage.jsx | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/web-ui/src/pages/PermissionsPage.jsx b/web-ui/src/pages/PermissionsPage.jsx
index 3c64be18cb..cb5f566697 100644
--- a/web-ui/src/pages/PermissionsPage.jsx
+++ b/web-ui/src/pages/PermissionsPage.jsx
@@ -82,7 +82,9 @@ const EditPermissionsPage = () => {
};
if (csrf) {
- getPermissions();
+ if(rolePermissionsList.length === 0){
+ getPermissions();
+ }
getRolePermissions();
}
}, [csrf, refresh]);
From f620b5c5405649f6cc69d838b06708dff37c40f8 Mon Sep 17 00:00:00 2001
From: Michael Kimberlin
Date: Thu, 21 Mar 2024 07:53:02 -0500
Subject: [PATCH 36/37] fixed a hook dependency
---
web-ui/src/pages/PermissionsPage.jsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/web-ui/src/pages/PermissionsPage.jsx b/web-ui/src/pages/PermissionsPage.jsx
index cb5f566697..b3e8c45516 100644
--- a/web-ui/src/pages/PermissionsPage.jsx
+++ b/web-ui/src/pages/PermissionsPage.jsx
@@ -87,7 +87,7 @@ const EditPermissionsPage = () => {
}
getRolePermissions();
}
- }, [csrf, refresh]);
+ }, [csrf, refresh, rolePermissionsList.length]);
useEffect(() => {
if(selectedRole && rolePermissionsList) {
From 74ba469841dd07ca53f1814c8f596755563bffe4 Mon Sep 17 00:00:00 2001
From: Michael Kimberlin
Date: Thu, 21 Mar 2024 17:01:29 -0500
Subject: [PATCH 37/37] Adjustments from PR feedback
---
.../services/permissions/Permission.java | 4 +-
web-ui/src/api/rolepermissions.js | 4 +-
web-ui/src/api/roles.js | 8 -
web-ui/src/components/menu/Menu.jsx | 1 -
web-ui/src/context/actions.js | 3 -
web-ui/src/helpers/checks.js | 9 -
web-ui/src/pages/EditPermissionsPage.jsx | 8 +-
web-ui/src/pages/EditSkillsPage.css | 8 -
web-ui/src/pages/PermissionsPage.jsx | 100 ++---
web-ui/src/pages/PermissionsPage.test.js | 21 +-
.../PermissionsPage.test.js.snap | 405 +++++++++++++++++-
11 files changed, 472 insertions(+), 99 deletions(-)
diff --git a/server/src/main/java/com/objectcomputing/checkins/services/permissions/Permission.java b/server/src/main/java/com/objectcomputing/checkins/services/permissions/Permission.java
index fff5e75b71..1b05dd7992 100644
--- a/server/src/main/java/com/objectcomputing/checkins/services/permissions/Permission.java
+++ b/server/src/main/java/com/objectcomputing/checkins/services/permissions/Permission.java
@@ -38,6 +38,8 @@ public class Permission {
@Schema(description = "A more verbose description of the permission to be displayed on UI")
private String description;
+ public Permission() {}
+
public Permission(UUID id, String permission, @Nullable String description) {
this.id = id;
this.permission = permission;
@@ -64,7 +66,7 @@ public String getDescription() {
return Permissions.valueOf(permission).getDescription(); //ignoring the database for now...
}
- public void setDescription(String description) {
+ public void setDescription(@Nullable String description) {
this.description = description;
}
diff --git a/web-ui/src/api/rolepermissions.js b/web-ui/src/api/rolepermissions.js
index a8cc55a1f6..ab00312aa1 100644
--- a/web-ui/src/api/rolepermissions.js
+++ b/web-ui/src/api/rolepermissions.js
@@ -10,7 +10,7 @@ export const getRolePermissionsList = async (cookie) => {
});
};
-export const postRolePermissionsList = async (roleData, cookie) => {
+export const postRolePermission = async (roleData, cookie) => {
return resolve({
method: "post",
url: rolePermissionsListUrl,
@@ -20,7 +20,7 @@ export const postRolePermissionsList = async (roleData, cookie) => {
});
};
-export const deleteRolePermissionsList = async (roleData, cookie) => {
+export const deleteRolePermission = async (roleData, cookie) => {
return resolve({
method: "delete",
url: rolePermissionsListUrl,
diff --git a/web-ui/src/api/roles.js b/web-ui/src/api/roles.js
index 0db9879c51..90f65e3142 100644
--- a/web-ui/src/api/roles.js
+++ b/web-ui/src/api/roles.js
@@ -19,14 +19,6 @@ export const getAllUserRoles = async (cookie) => {
});
};
-export const getCurrentUserRole = async (memberId, cookie) => {
- return resolve({
- url: `${roleURL}/${memberId}`,
- responseType: "json",
- headers: { "X-CSRF-Header": cookie },
- });
-};
-
export const removeUserFromRole = async (roleId, memberId, cookie) => {
return resolve({
method: "delete",
diff --git a/web-ui/src/components/menu/Menu.jsx b/web-ui/src/components/menu/Menu.jsx
index 353016cf72..6bd992778b 100644
--- a/web-ui/src/components/menu/Menu.jsx
+++ b/web-ui/src/components/menu/Menu.jsx
@@ -95,7 +95,6 @@ const Root = styled('div')(({theme}) => ({
}));
const adminLinks = [
- // ["/admin/permissions", "Permissions"],
["/admin/permissions", "Permissions"],
["/admin/roles", "Roles"],
["/admin/users", "Users"],
diff --git a/web-ui/src/context/actions.js b/web-ui/src/context/actions.js
index d3754b2711..d9b6fbbf2d 100644
--- a/web-ui/src/context/actions.js
+++ b/web-ui/src/context/actions.js
@@ -2,12 +2,10 @@ export const ADD_CHECKIN = "@@check-ins/add_checkin";
export const ADD_GUILD = "@@check-ins/add_guild";
export const ADD_MEMBER_SKILL = "@@check-ins/add_member_skill";
export const ADD_SKILL = "@@check-ins/add-skill";
-export const ADD_PERMISSION = "@@check-ins/add-permission";
export const ADD_TEAM = "@@check-ins/add_team";
export const DELETE_MEMBER_PROFILE = "@@check-ins/delete_member_profile";
export const DELETE_MEMBER_SKILL = "@@check-ins/delete_member_skill";
export const DELETE_SKILL = "@@check-ins/delete-skill";
-export const DELETE_PERMISSION = "@@check-ins/delete-permission";
export const DELETE_ROLE = "@@check-ins/delete-role";
export const MY_PROFILE_UPDATE = "@@check-ins/update_profile";
export const SET_CSRF = "@@check-ins/update_csrf";
@@ -23,7 +21,6 @@ export const UPDATE_MEMBER_SKILLS = "@@check-ins/update_member_skills";
export const UPDATE_ROLES = "@@check-ins/update_roles";
export const UPDATE_SKILL = "@@check-ins/update_skill";
export const UPDATE_SKILLS = "@@check-ins/update_skills";
-export const UPDATE_PERMISSION = "@@check-ins/update-permission";
export const UPDATE_TEAM_MEMBERS = "@@check-ins/update_team_members";
export const UPDATE_TEAMS = "@@check-ins/update_teams";
export const UPDATE_TERMINATED_MEMBERS =
diff --git a/web-ui/src/helpers/checks.js b/web-ui/src/helpers/checks.js
index 340ac415d9..c643dbc636 100644
--- a/web-ui/src/helpers/checks.js
+++ b/web-ui/src/helpers/checks.js
@@ -6,15 +6,6 @@
export const isArrayPresent = (arr) => Array.isArray(arr) && arr.length;
-/**
- * Check for whether unique object is already in an array and return a boolean.
- * @param arr - an array
- * @returns a boolean
- */
-export const isObjectInArray = (arr, obj) => {
- return arr.includes(obj);
-};
-
/**
* If a parameter is found in an object within an array, return the array with just that object.
* @param arr - an array
diff --git a/web-ui/src/pages/EditPermissionsPage.jsx b/web-ui/src/pages/EditPermissionsPage.jsx
index a9a729d887..cb15573e38 100644
--- a/web-ui/src/pages/EditPermissionsPage.jsx
+++ b/web-ui/src/pages/EditPermissionsPage.jsx
@@ -5,8 +5,8 @@ import EditPermissionsPageRoles from "./EditPermissionsPageRoles";
import { getPermissionsList } from "../api/permissions";
import {
getRolePermissionsList,
- postRolePermissionsList,
- deleteRolePermissionsList,
+ postRolePermission,
+ deleteRolePermission,
} from "../api/rolepermissions";
import { getMemberRolesList } from "../api/memberroles";
import { isArrayPresent, filterObjectByValOrKey } from "../helpers/checks";
@@ -216,7 +216,7 @@ const EditPermissionsPage = () => {
const changeRolePermission = async (roleId, permissionId) => {
let newSchema = { roleId: roleId, permissionId: permissionId };
- let res = await postRolePermissionsList(newSchema, csrf);
+ let res = await postRolePermission(newSchema, csrf);
let data =
res.payload && res.payload.data && !res.error ? res.payload.data : null;
if (data) {
@@ -241,7 +241,7 @@ const EditPermissionsPage = () => {
const deleteRolePermission = async (roleId, permissionId) => {
let newSchema = { roleId: roleId, permissionId: permissionId };
- let res = await deleteRolePermissionsList(newSchema, csrf);
+ let res = await deleteRolePermission(newSchema, csrf);
let data = !res.error ? "Success" : null;
if (data) {
window.snackDispatch({
diff --git a/web-ui/src/pages/EditSkillsPage.css b/web-ui/src/pages/EditSkillsPage.css
index 003c116f06..951a26bb95 100644
--- a/web-ui/src/pages/EditSkillsPage.css
+++ b/web-ui/src/pages/EditSkillsPage.css
@@ -25,11 +25,3 @@
display: flex;
margin-top: 1rem;
}
-
-.edit-permissions {
- display: block;
- float: left;
- position: relative;
- width: auto;
- margin: 2%;
-}
diff --git a/web-ui/src/pages/PermissionsPage.jsx b/web-ui/src/pages/PermissionsPage.jsx
index b3e8c45516..3c27c371e7 100644
--- a/web-ui/src/pages/PermissionsPage.jsx
+++ b/web-ui/src/pages/PermissionsPage.jsx
@@ -3,10 +3,10 @@ import React, { useEffect, useContext, useState } from "react";
import { getPermissionsList } from "../api/permissions";
import {
getRolePermissionsList,
- postRolePermissionsList,
- deleteRolePermissionsList,
+ postRolePermission,
+ deleteRolePermission,
} from "../api/rolepermissions";
-import { Checkbox } from "@mui/material";
+import { Checkbox, FormControl, MenuItem, Select, InputLabel } from "@mui/material";
import { UPDATE_TOAST } from "../context/actions";
import { AppContext } from "../context/AppContext";
import { selectRoles, selectHasPermissionAssignmentPermission } from "../context/selectors";
@@ -101,59 +101,36 @@ const EditPermissionsPage = () => {
setSelectedRole(roles.find((role) => role.id === event.target.value));
};
- const addRolePermission = async (roleId, permissionId) => {
- let newSchema = { roleId: roleId, permissionId: permissionId };
- let res = await postRolePermissionsList(newSchema, csrf);
- let data =
- res.payload && res.payload.data && !res.error ? res.payload.data : null;
- if (data) {
- window.snackDispatch({
- type: UPDATE_TOAST,
- payload: {
- severity: "success",
- toast: `Permission added to Role`,
- },
- });
- } else {
- window.snackDispatch({
- type: UPDATE_TOAST,
- payload: {
- severity: "warning",
- toast: `Problem changing permission for that role`,
- },
- });
- }
+ const addPermissionForRole = async (role, permission) => {
+ let newSchema = { roleId: role.id, permissionId: permission.id };
+ let res = await postRolePermission(newSchema, csrf);
+ const snackPayload = res.error
+ ? { severity: "warning", toast: `Problem adding ${permission.description} to ${role.role}` }
+ : { severity: "success", toast: `${permission.description} added to ${role.role}` };
+ window.snackDispatch({
+ type: UPDATE_TOAST,
+ payload: snackPayload,
+ });
};
- const deleteRolePermission = async (roleId, permissionId) => {
- let newSchema = { roleId: roleId, permissionId: permissionId };
- let res = await deleteRolePermissionsList(newSchema, csrf);
- let data = !res.error ? "Success" : null;
- if (data) {
- window.snackDispatch({
- type: UPDATE_TOAST,
- payload: {
- severity: "success",
- toast: `Permission removed from Role`,
- },
- });
- } else {
- window.snackDispatch({
- type: UPDATE_TOAST,
- payload: {
- severity: "warning",
- toast: `Problem deleting permission for that role`,
- },
- });
- }
+ const deletePermissionForRole = async (role, permission) => {
+ let newSchema = { roleId: role.id, permissionId: permission.id };
+ let res = await deleteRolePermission(newSchema, csrf);
+ const snackPayload = res.error
+ ? { severity: "warning", toast: `Problem deleting ${permission.description} from ${role.role}` }
+ : { severity: "success", toast: `${permission.description} removed from ${role.role}` };
+ window.snackDispatch({
+ type: UPDATE_TOAST,
+ payload: snackPayload,
+ });
};
- const handleChange = async (event, roleId, permissionId) => {
+ const handleChange = async (event, role, permission) => {
if (event?.target?.checked) {
- await addRolePermission(roleId, permissionId);
+ await addPermissionForRole(role, permission);
setRefresh(!refresh);
} else {
- await deleteRolePermission(roleId, permissionId);
+ await deletePermissionForRole(role, permission);
setRefresh(!refresh);
}
};
@@ -164,15 +141,20 @@ const EditPermissionsPage = () => {
(
<>
-
-
+
+ Select Role
+
+
{ selectedRole && rolePermissions && categoriesList?.map((category) => (
@@ -184,7 +166,7 @@ const EditPermissionsPage = () => {
permission={permission.permission}
title={permission.description}
enabled={isPermissionEnabled(rolePermissions, permission)}
- onChange={(event) => handleChange(event, selectedRole?.id, permission.id, csrf)} />
+ onChange={(event) => handleChange(event, selectedRole, permission)} />
))
}
diff --git a/web-ui/src/pages/PermissionsPage.test.js b/web-ui/src/pages/PermissionsPage.test.js
index 6f2cc4aabe..dfb395f371 100644
--- a/web-ui/src/pages/PermissionsPage.test.js
+++ b/web-ui/src/pages/PermissionsPage.test.js
@@ -2,9 +2,28 @@ import React from "react";
import PermissionsPage from "./PermissionsPage";
import { AppContextProvider } from "../context/AppContext";
+const initialState = {
+ state: {
+ userProfile: {
+ name: "holmes",
+ role: ["PDL"],
+ permissions: [{permission:"CAN_ASSIGN_ROLE_PERMISSIONS"}],
+ imageUrl:
+ "https://upload.wikimedia.org/wikipedia/commons/7/74/SNL_MrBill_Doll.jpg",
+ },
+ memberProfiles: [
+ {
+ id: "1234-5434-8765-3458",
+ name: "holmes",
+ },
+ ],
+ index: 0,
+ },
+};
+
it("renders correctly", () => {
snapshot(
-