diff --git a/src/interfaces/permissions.ts b/src/interfaces/permissions.ts index 29efc1b7..808564b6 100644 --- a/src/interfaces/permissions.ts +++ b/src/interfaces/permissions.ts @@ -27,6 +27,7 @@ export const permissions = [ "viewCountryManager", "viewAdmin", "viewGroup", + "viewCodes", // edit data "editStudent", "editTeacher", @@ -41,8 +42,10 @@ export const permissions = [ "deleteCountryManager", "deleteAdmin", "deleteGroup", - // create pages + "deleteCodes", + // create options "createGroup", + "createCodes" ] as const; export type PermissionType = (typeof permissions)[keyof typeof permissions]; diff --git a/src/pages/(admin)/BatchCodeGenerator.tsx b/src/pages/(admin)/BatchCodeGenerator.tsx index 7a0d5f52..2ff2369a 100644 --- a/src/pages/(admin)/BatchCodeGenerator.tsx +++ b/src/pages/(admin)/BatchCodeGenerator.tsx @@ -297,7 +297,12 @@ export default function BatchCodeGenerator({ user }: { user: User }) { {filesContent.length > 0 ? filesContent[0].name : "Choose a file"} {user && - checkAccess(user, ["developer", "admin", "corporate", "mastercorporate"]) && ( + checkAccess(user, [ + "developer", + "admin", + "corporate", + "mastercorporate", + ]) && ( <>
); diff --git a/src/pages/(admin)/CodeGenerator.tsx b/src/pages/(admin)/CodeGenerator.tsx index 30c5007a..c34c78fa 100644 --- a/src/pages/(admin)/CodeGenerator.tsx +++ b/src/pages/(admin)/CodeGenerator.tsx @@ -130,47 +130,48 @@ export default function CodeGenerator({ user }: { user: User }) { ))} )} - {user && - checkAccess(user, ["developer", "admin", "corporate"]) && ( - <> -
- - - Enabled - -
- {isExpiryDateEnabled && ( - - moment(date).isAfter(new Date()) && - (user.subscriptionExpirationDate - ? moment(date).isBefore(user.subscriptionExpirationDate) - : true) - } - dateFormat="dd/MM/yyyy" - selected={expiryDate} - onChange={(date) => setExpiryDate(date)} - /> - )} - - )} - + {user && checkAccess(user, ["developer", "admin", "corporate", "mastercorporate"]) && ( + <> +
+ + + Enabled + +
+ {isExpiryDateEnabled && ( + + moment(date).isAfter(new Date()) && + (user.subscriptionExpirationDate + ? moment(date).isBefore(user.subscriptionExpirationDate) + : true) + } + dateFormat="dd/MM/yyyy" + selected={expiryDate} + onChange={(date) => setExpiryDate(date)} + /> + )} + + )} + {checkAccess(user, ["developer", "admin", "corporate", "mastercorporate"], 'createCodes') && ( + + )} diff --git a/src/pages/(admin)/Lists/CodeList.tsx b/src/pages/(admin)/Lists/CodeList.tsx index 7ac20b3a..cc8d0f79 100644 --- a/src/pages/(admin)/Lists/CodeList.tsx +++ b/src/pages/(admin)/Lists/CodeList.tsx @@ -19,6 +19,7 @@ import { BsTrash } from "react-icons/bs"; import { toast } from "react-toastify"; import ReactDatePicker from "react-datepicker"; import clsx from "clsx"; +import { checkAccess } from "@/utils/permissions"; const columnHelper = createColumnHelper(); @@ -147,6 +148,12 @@ export default function CodeList({ user }: { user: User }) { .finally(reload); }; + const allowedToDelete = checkAccess( + user, + ["developer", "admin", "corporate", "mastercorporate"], + "deleteCodes" + ); + const defaultColumns = [ columnHelper.accessor("code", { id: "codeCheckbox", @@ -209,7 +216,7 @@ export default function CodeList({ user }: { user: User }) { cell: ({ row }: { row: { original: Code } }) => { return (
- {!row.original.userId && ( + {allowedToDelete && !row.original.userId && (
+ {allowedToDelete && (
{selectedCodes.length} code(s) selected
+ )}
diff --git a/src/pages/(admin)/Lists/index.tsx b/src/pages/(admin)/Lists/index.tsx index 0f8568eb..ddbad194 100644 --- a/src/pages/(admin)/Lists/index.tsx +++ b/src/pages/(admin)/Lists/index.tsx @@ -7,6 +7,7 @@ import ExamList from "./ExamList"; import GroupList from "./GroupList"; import PackageList from "./PackageList"; import UserList from "./UserList"; +import { checkAccess } from "@/utils/permissions"; export default function Lists({ user }: { user: User }) { return ( @@ -20,13 +21,13 @@ export default function Lists({ user }: { user: User }) { "transition duration-300 ease-in-out", selected ? "bg-white shadow" - : "text-blue-100 hover:bg-white/[0.12] hover:text-mti-purple-dark", + : "text-blue-100 hover:bg-white/[0.12] hover:text-mti-purple-dark" ) } > User List - {user?.type === "developer" && ( + {checkAccess(user, ["developer"]) && ( clsx( @@ -35,7 +36,7 @@ export default function Lists({ user }: { user: User }) { "transition duration-300 ease-in-out", selected ? "bg-white shadow" - : "text-blue-100 hover:bg-white/[0.12] hover:text-mti-purple-dark", + : "text-blue-100 hover:bg-white/[0.12] hover:text-mti-purple-dark" ) } > @@ -50,13 +51,13 @@ export default function Lists({ user }: { user: User }) { "transition duration-300 ease-in-out", selected ? "bg-white shadow" - : "text-blue-100 hover:bg-white/[0.12] hover:text-mti-purple-dark", + : "text-blue-100 hover:bg-white/[0.12] hover:text-mti-purple-dark" ) } > Group List - {user && ["developer", "admin", "corporate"].includes(user.type) && ( + {checkAccess(user, ["developer", "admin", "corporate"]) && ( clsx( @@ -65,14 +66,14 @@ export default function Lists({ user }: { user: User }) { "transition duration-300 ease-in-out", selected ? "bg-white shadow" - : "text-blue-100 hover:bg-white/[0.12] hover:text-mti-purple-dark", + : "text-blue-100 hover:bg-white/[0.12] hover:text-mti-purple-dark" ) } > Code List )} - {user && ["developer", "admin"].includes(user.type) && ( + {checkAccess(user, ["developer", "admin"]) && ( clsx( @@ -81,14 +82,14 @@ export default function Lists({ user }: { user: User }) { "transition duration-300 ease-in-out", selected ? "bg-white shadow" - : "text-blue-100 hover:bg-white/[0.12] hover:text-mti-purple-dark", + : "text-blue-100 hover:bg-white/[0.12] hover:text-mti-purple-dark" ) } > Package List )} - {user && ["developer", "admin"].includes(user.type) && ( + {checkAccess(user, ["developer", "admin"]) && ( clsx( @@ -97,7 +98,7 @@ export default function Lists({ user }: { user: User }) { "transition duration-300 ease-in-out", selected ? "bg-white shadow" - : "text-blue-100 hover:bg-white/[0.12] hover:text-mti-purple-dark", + : "text-blue-100 hover:bg-white/[0.12] hover:text-mti-purple-dark" ) } > @@ -109,7 +110,7 @@ export default function Lists({ user }: { user: User }) { - {user?.type === "developer" && ( + {checkAccess(user, ["developer"]) && ( @@ -117,17 +118,21 @@ export default function Lists({ user }: { user: User }) { - {user && ["developer", "admin", "corporate"].includes(user.type) && ( + {checkAccess( + user, + ["developer", "admin", "corporate", "mastercorporate"], + "viewCodes" + ) && ( )} - {user && ["developer", "admin"].includes(user.type) && ( + {checkAccess(user, ["developer", "admin"]) && ( )} - {user && ["developer", "admin"].includes(user.type) && ( + {checkAccess(user, ["developer", "admin"]) && ( diff --git a/src/pages/settings.tsx b/src/pages/settings.tsx index 51bc0ea9..17e673a9 100644 --- a/src/pages/settings.tsx +++ b/src/pages/settings.tsx @@ -14,6 +14,7 @@ import BatchCodeGenerator from "./(admin)/BatchCodeGenerator"; import {shouldRedirectHome} from "@/utils/navigation.disabled"; import ExamGenerator from "./(admin)/ExamGenerator"; import BatchCreateUser from "./(admin)/BatchCreateUser"; +import { checkAccess, getTypesOfUser } from "@/utils/permissions"; export const getServerSideProps = withIronSessionSsr(({req, res}) => { const user = req.session.user; @@ -60,7 +61,7 @@ export default function Admin() {
- {user.type !== "teacher" && ( + {checkAccess(user, getTypesOfUser(["teacher"]), 'viewCodes') && ( <>