From 202632ff58dca06318a46c984bbbab1d53353616 Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Thu, 22 Aug 2024 12:27:15 +0100 Subject: [PATCH] ENCOA-89, ENCOA-91, ENCOA-92, ENCOA-95 All changes related to permissions towards types of users --- src/components/UserCard.tsx | 6 +- src/constants/userPermissions.ts | 164 +++++++++++------------ src/pages/(admin)/BatchCodeGenerator.tsx | 6 +- src/pages/(admin)/BatchCreateUser.tsx | 40 ++++-- src/pages/(admin)/CodeGenerator.tsx | 10 +- src/pages/settings.tsx | 2 +- 6 files changed, 126 insertions(+), 102 deletions(-) diff --git a/src/components/UserCard.tsx b/src/components/UserCard.tsx index ba02b079..6705677d 100644 --- a/src/components/UserCard.tsx +++ b/src/components/UserCard.tsx @@ -248,7 +248,7 @@ const UserCard = ({user, loggedInUser, onClose, onViewStudents, onViewTeachers, onChange={setCompanyName} placeholder="Enter corporate name" defaultValue={companyName} - disabled={disabled} + disabled={disabled || checkAccess(loggedInUser, getTypesOfUser(["developer", "admin"]))} /> setUserAmount(e ? parseInt(e) : undefined)} placeholder="Enter number of users" defaultValue={userAmount} - disabled={disabled} + disabled={disabled || checkAccess(loggedInUser, getTypesOfUser(["developer", "admin"]))} /> setMonthlyDuration(e ? parseInt(e) : undefined)} placeholder="Enter monthly duration" defaultValue={monthlyDuration} - disabled={disabled} + disabled={disabled || checkAccess(loggedInUser, getTypesOfUser(["developer", "admin"]))} />
diff --git a/src/constants/userPermissions.ts b/src/constants/userPermissions.ts index af3e7543..8716c301 100644 --- a/src/constants/userPermissions.ts +++ b/src/constants/userPermissions.ts @@ -1,91 +1,91 @@ -import { Type } from "@/interfaces/user"; +import {Type} from "@/interfaces/user"; export const PERMISSIONS = { - generateCode: { - student: ["corporate", "developer", "admin", "mastercorporate"], - teacher: ["corporate", "developer", "admin", "mastercorporate"], - corporate: ["admin", "developer"], - mastercorporate: ["admin", "developer"], + generateCode: { + student: ["corporate", "developer", "admin", "mastercorporate"], + teacher: ["corporate", "developer", "admin", "mastercorporate"], + corporate: ["admin", "developer"], + mastercorporate: ["admin", "developer"], - admin: ["developer", "admin"], - agent: ["developer", "admin"], - developer: ["developer"], - }, - deleteUser: { - student: { - perm: "deleteStudent", - list: ["corporate", "developer", "admin", "mastercorporate"], - }, - teacher: { - perm: "deleteTeacher", - list: ["corporate", "developer", "admin", "mastercorporate"], - }, - corporate: { - perm: "deleteCorporate", - list: ["admin", "developer"], - }, - mastercorporate: { - perm: undefined, - list: ["admin", "developer"], - }, + admin: ["developer", "admin"], + agent: ["developer", "admin"], + developer: ["developer"], + }, + deleteUser: { + student: { + perm: "deleteStudent", + list: ["corporate", "developer", "admin", "mastercorporate"], + }, + teacher: { + perm: "deleteTeacher", + list: ["corporate", "developer", "admin", "mastercorporate"], + }, + corporate: { + perm: "deleteCorporate", + list: ["admin", "developer"], + }, + mastercorporate: { + perm: undefined, + list: ["admin", "developer"], + }, - admin: { - perm: "deleteAdmin", - list: ["developer", "admin"], - }, - agent: { - perm: "deleteCountryManager", - list: ["developer", "admin"], - }, - developer: { - perm: undefined, - list: ["developer"], - }, - }, - updateUser: { - student: { - perm: "editStudent", - list: ["developer", "admin"], - }, - teacher: { - perm: "editTeacher", - list: ["developer", "admin"], - }, + admin: { + perm: "deleteAdmin", + list: ["developer", "admin"], + }, + agent: { + perm: "deleteCountryManager", + list: ["developer", "admin"], + }, + developer: { + perm: undefined, + list: ["developer"], + }, + }, + updateUser: { + student: { + perm: "editStudent", + list: ["developer", "admin", "corporate", "mastercorporate", "teacher"], + }, + teacher: { + perm: "editTeacher", + list: ["developer", "admin", "corporate", "mastercorporate"], + }, - corporate: { - perm: "editCorporate", - list: ["admin", "developer"], - }, - mastercorporate: { - perm: undefined, - list: ["admin", "developer"], - }, + corporate: { + perm: "editCorporate", + list: ["developer", "admin", "mastercorporate"], + }, + mastercorporate: { + perm: undefined, + list: ["admin", "developer"], + }, - admin: { - perm: "editAdmin", - list: ["developer", "admin"], - }, + admin: { + perm: "editAdmin", + list: ["developer", "admin"], + }, - agent: { - perm: "editCountryManager", - list: ["developer", "admin"], - }, - developer: { - perm: undefined, - list: ["developer"], - }, - }, - updateExpiryDate: { - student: ["developer", "admin"], - teacher: ["developer", "admin"], - corporate: ["admin", "developer"], - mastercorporate: ["admin", "developer"], + agent: { + perm: "editCountryManager", + list: ["developer", "admin"], + }, + developer: { + perm: undefined, + list: ["developer"], + }, + }, + updateExpiryDate: { + student: ["developer", "admin"], + teacher: ["developer", "admin"], + corporate: ["admin", "developer"], + mastercorporate: ["admin", "developer"], - admin: ["developer", "admin"], - agent: ["developer", "admin"], - developer: ["developer"], - }, - examManagement: { - delete: ["developer", "admin"], - }, + admin: ["developer", "admin"], + agent: ["developer", "admin"], + developer: ["developer"], + }, + examManagement: { + delete: ["developer", "admin"], + }, }; diff --git a/src/pages/(admin)/BatchCodeGenerator.tsx b/src/pages/(admin)/BatchCodeGenerator.tsx index e17f5281..cee8393a 100644 --- a/src/pages/(admin)/BatchCodeGenerator.tsx +++ b/src/pages/(admin)/BatchCodeGenerator.tsx @@ -34,15 +34,15 @@ const USER_TYPE_PERMISSIONS: { }, agent: { perm: "createCodeCountryManager", - list: [], + list: ["student", "teacher", "corporate", "mastercorporate"], }, corporate: { perm: "createCodeCorporate", - list: ["student", "teacher"], + list: ["student", "teacher", "corporate"], }, mastercorporate: { perm: undefined, - list: ["student", "teacher", "corporate"], + list: ["student", "teacher", "corporate", "mastercorporate"], }, admin: { perm: "createCodeAdmin", diff --git a/src/pages/(admin)/BatchCreateUser.tsx b/src/pages/(admin)/BatchCreateUser.tsx index d0d50c57..5335c085 100644 --- a/src/pages/(admin)/BatchCreateUser.tsx +++ b/src/pages/(admin)/BatchCreateUser.tsx @@ -11,10 +11,11 @@ import Modal from "@/components/Modal"; import {BsQuestionCircleFill} from "react-icons/bs"; import {PermissionType} from "@/interfaces/permissions"; import moment from "moment"; -import {checkAccess} from "@/utils/permissions"; +import {checkAccess, getTypesOfUser} from "@/utils/permissions"; import Checkbox from "@/components/Low/Checkbox"; import ReactDatePicker from "react-datepicker"; import clsx from "clsx"; +import usePermissions from "@/hooks/usePermissions"; const EMAIL_REGEX = new RegExp(/^[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*@[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*$/); type Type = Exclude; @@ -26,7 +27,7 @@ const USER_TYPE_LABELS: {[key in Type]: string} = { }; const USER_TYPE_PERMISSIONS: { - [key in Type]: {perm: PermissionType | undefined; list: Type[]}; + [key in UserType]: {perm: PermissionType | undefined; list: UserType[]}; } = { student: { perm: "createCodeStudent", @@ -36,9 +37,25 @@ const USER_TYPE_PERMISSIONS: { perm: "createCodeTeacher", list: [], }, + agent: { + perm: "createCodeCountryManager", + list: ["student", "teacher", "corporate", "mastercorporate"], + }, corporate: { perm: "createCodeCorporate", - list: ["student", "teacher"], + list: ["student", "teacher", "corporate"], + }, + mastercorporate: { + perm: undefined, + list: ["student", "teacher", "corporate", "mastercorporate"], + }, + admin: { + perm: "createCodeAdmin", + list: ["student", "teacher", "agent", "corporate", "admin", "mastercorporate"], + }, + developer: { + perm: undefined, + list: ["student", "teacher", "agent", "corporate", "admin", "developer", "mastercorporate"], }, }; @@ -65,6 +82,7 @@ export default function BatchCreateUser({user}: {user: User}) { const [showHelp, setShowHelp] = useState(false); const {users} = useUsers(); + const {permissions} = usePermissions(user?.id || ""); const {openFilePicker, filesContent, clear} = useFilePicker({ accept: ".xlsx", @@ -214,11 +232,17 @@ export default function BatchCreateUser({user}: {user: User}) { defaultValue="student" onChange={(e) => setType(e.target.value as Type)} className="flex min-h-[70px] w-full min-w-[350px] cursor-pointer justify-center rounded-full border bg-white p-6 text-sm font-normal focus:outline-none"> - {Object.keys(USER_TYPE_LABELS).map((type) => ( - - ))} + {Object.keys(USER_TYPE_LABELS) + .filter((x) => { + const {list, perm} = USER_TYPE_PERMISSIONS[x as Type]; + // if (x === "corporate") console.log(list, perm, checkAccess(user, list, permissions, perm)); + return checkAccess(user, getTypesOfUser(list), permissions, perm); + }) + .map((type) => ( + + ))} )}