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", + ]) && ( <>
();
@@ -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') && (
<>