diff --git a/src/components/UserCard.tsx b/src/components/UserCard.tsx index 6705677d..0088d502 100644 --- a/src/components/UserCard.tsx +++ b/src/components/UserCard.tsx @@ -277,7 +277,7 @@ const UserCard = ({user, loggedInUser, onClose, onViewStudents, onViewTeachers, type="number" defaultValue={paymentValue || 0} className="col-span-3" - disabled={disabled} + disabled={disabled || checkAccess(loggedInUser, getTypesOfUser(["developer", "admin"]))} /> diff --git a/src/pages/(admin)/BatchCodeGenerator.tsx b/src/pages/(admin)/BatchCodeGenerator.tsx index cee8393a..dd73e70c 100644 --- a/src/pages/(admin)/BatchCodeGenerator.tsx +++ b/src/pages/(admin)/BatchCodeGenerator.tsx @@ -38,11 +38,11 @@ const USER_TYPE_PERMISSIONS: { }, corporate: { perm: "createCodeCorporate", - list: ["student", "teacher", "corporate"], + list: ["student", "teacher"], }, mastercorporate: { perm: undefined, - list: ["student", "teacher", "corporate", "mastercorporate"], + list: ["student", "teacher", "corporate"], }, admin: { perm: "createCodeAdmin", diff --git a/src/pages/(admin)/BatchCreateUser.tsx b/src/pages/(admin)/BatchCreateUser.tsx index 5335c085..fe013429 100644 --- a/src/pages/(admin)/BatchCreateUser.tsx +++ b/src/pages/(admin)/BatchCreateUser.tsx @@ -43,11 +43,11 @@ const USER_TYPE_PERMISSIONS: { }, corporate: { perm: "createCodeCorporate", - list: ["student", "teacher", "corporate"], + list: ["student", "teacher"], }, mastercorporate: { perm: undefined, - list: ["student", "teacher", "corporate", "mastercorporate"], + list: ["student", "teacher", "corporate"], }, admin: { perm: "createCodeAdmin", diff --git a/src/pages/(admin)/CodeGenerator.tsx b/src/pages/(admin)/CodeGenerator.tsx index edaba208..c8fbcfe3 100644 --- a/src/pages/(admin)/CodeGenerator.tsx +++ b/src/pages/(admin)/CodeGenerator.tsx @@ -32,11 +32,11 @@ const USER_TYPE_PERMISSIONS: { }, corporate: { perm: "createCodeCorporate", - list: ["student", "teacher", "corporate"], + list: ["student", "teacher"], }, mastercorporate: { perm: undefined, - list: ["student", "teacher", "corporate", "mastercorporate"], + list: ["student", "teacher", "corporate"], }, admin: { perm: "createCodeAdmin", diff --git a/src/pages/record.tsx b/src/pages/record.tsx index 66bc971f..59481dfb 100644 --- a/src/pages/record.tsx +++ b/src/pages/record.tsx @@ -22,6 +22,7 @@ import {usePDFDownload} from "@/hooks/usePDFDownload"; import useRecordStore from "@/stores/recordStore"; import useTrainingContentStore from "@/stores/trainingContentStore"; import StatsGridItem from "@/components/StatGridItem"; +import {checkAccess} from "@/utils/permissions"; export const getServerSideProps = withIronSessionSsr(({req, res}) => { const user = req.session.user; @@ -68,10 +69,9 @@ export default function History({user}: {user: User}) { const {assignments} = useAssignments({}); const {users} = useUsers(); - const {stats, isLoading: isStatsLoading} = useStats(user?.type === "student" ? user?.id : statsUserId); + const {stats, isLoading: isStatsLoading} = useStats(statsUserId || user?.id); const {groups: allGroups} = useGroups({}); - - const groups = allGroups.filter((x) => x.admin === user.id); + const {groups} = useGroups({admin: user?.id, userType: user?.type}); const setExams = useExamStore((state) => state.setExams); const setShowSolutions = useExamStore((state) => state.setShowSolutions); @@ -82,6 +82,8 @@ export default function History({user}: {user: User}) { const renderPdfIcon = usePDFDownload("stats"); const router = useRouter(); + useEffect(() => setStatsUserId(user.id), [setStatsUserId, user]); + useEffect(() => { if (stats && !isStatsLoading) { setGroupedStats( @@ -197,6 +199,7 @@ export default function History({user}: {user: User}) { const selectableCorporates = [ defaultSelectableCorporate, ...users + .filter((x) => groups.flatMap((g) => [g.admin, ...g.participants]).includes(x.id)) .filter((x) => x.type === "corporate") .map((x) => ({ value: x.id, @@ -208,26 +211,14 @@ export default function History({user}: {user: User}) { const getUsersList = (): User[] => { if (selectedCorporate) { - // get groups for that corporate const selectedCorporateGroups = allGroups.filter((x) => x.admin === selectedCorporate); - - // get the teacher ids for that group const selectedCorporateGroupsParticipants = selectedCorporateGroups.flatMap((x) => x.participants); - // // search for groups for these teachers - // const teacherGroups = allGroups.filter((x) => { - // return selectedCorporateGroupsParticipants.includes(x.admin); - // }); - - // const usersList = [ - // ...selectedCorporateGroupsParticipants, - // ...teacherGroups.flatMap((x) => x.participants), - // ]; const userListWithUsers = selectedCorporateGroupsParticipants.map((x) => users.find((y) => y.id === x)) as User[]; return userListWithUsers.filter((x) => x); } - return users || []; + return user.type !== "mastercorporate" ? users : users.filter((x) => groups.flatMap((g) => [g.admin, ...g.participants]).includes(x.id)); }; const corporateFilteredUserList = getUsersList(); @@ -267,7 +258,7 @@ export default function History({user}: {user: User}) { - {(user.type === "developer" || user.type === "admin") && !training && ( + {checkAccess(user, ["developer", "admin", "mastercorporate"]) && !training && ( <> Corporate